11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * linux/arch/m68knommu/kernel/entry.S 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com) 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1998 D. Jeff Dionne <jeff@lineo.ca>, 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Kenneth Albanowski <kjahds@kjahds.com>, 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2000 Lineo Inc. (www.lineo.com) 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Based on: 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * linux/arch/m68k/kernel/entry.S 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 1991, 1992 Linus Torvalds 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This file is subject to the terms and conditions of the GNU General Public 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * License. See the file README.legal in the main directory of this archive 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * for more details. 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Linux/m68k support by Hamish Macdonald 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 68060 fixes by Jesper Skov 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ColdFire support by Greg Ungerer (gerg@snapgear.com) 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 5307 fixes by David W. Miller 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * linux 2.4 support David McCullough <davidm@snapgear.com> 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/linkage.h> 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/errno.h> 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/setup.h> 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/segment.h> 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/asm-offsets.h> 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/entry.h> 332d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan#include <asm/unistd.h> 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.text 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl buserr 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl trap 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl ret_from_exception 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl ret_from_signal 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl sys_fork 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl sys_clone 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl sys_vfork 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(buserr) 4661619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer SAVE_ALL_INT 47bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer GET_CURRENT(%d0) 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds movel %sp,%sp@- /* stack frame pointer argument */ 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jsr buserr_c 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds addql #4,%sp 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jra ret_from_exception 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(trap) 5461619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer SAVE_ALL_INT 55bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer GET_CURRENT(%d0) 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds movel %sp,%sp@- /* stack frame pointer argument */ 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jsr trap_c 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds addql #4,%sp 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jra ret_from_exception 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef TRAP_DBG_INTERRUPT 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds.globl dbginterrupt 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(dbginterrupt) 6561619b12078dc8b85a3d4cbfa16f650daa341bd1Greg Ungerer SAVE_ALL_INT 66bbc6f1ba509cf9cda42ce63bbd40afe577ab028eGreg Ungerer GET_CURRENT(%d0) 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds movel %sp,%sp@- /* stack frame pointer argument */ 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jsr dbginterrupt_c 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds addql #4,%sp 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jra ret_from_exception 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(reschedule) 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* save top of frame */ 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pea %sp@ 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jbsr set_esp0 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds addql #4,%sp 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pea ret_from_exception 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jmp schedule 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(ret_from_fork) 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds movel %d1,%sp@- 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jsr schedule_tail 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds addql #4,%sp 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jra ret_from_exception 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(sys_fork) 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds SAVE_SWITCH_STACK 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pea %sp@(SWITCH_STACK_SIZE) 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jbsr m68k_fork 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds addql #4,%sp 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds RESTORE_SWITCH_STACK 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rts 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(sys_vfork) 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds SAVE_SWITCH_STACK 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pea %sp@(SWITCH_STACK_SIZE) 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jbsr m68k_vfork 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds addql #4,%sp 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds RESTORE_SWITCH_STACK 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rts 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(sys_clone) 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds SAVE_SWITCH_STACK 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds pea %sp@(SWITCH_STACK_SIZE) 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jbsr m68k_clone 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds addql #4,%sp 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds RESTORE_SWITCH_STACK 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rts 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(sys_sigreturn) 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds SAVE_SWITCH_STACK 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jbsr do_sigreturn 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds RESTORE_SWITCH_STACK 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rts 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(sys_rt_sigreturn) 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds SAVE_SWITCH_STACK 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jbsr do_rt_sigreturn 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds RESTORE_SWITCH_STACK 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rts 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1232d7f16d6d12682c41fb287ea8261df8e4679f638Wilson CallanENTRY(ret_from_user_signal) 1242d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan moveq #__NR_sigreturn,%d0 1252d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan trap #0 1262d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan 1272d7f16d6d12682c41fb287ea8261df8e4679f638Wilson CallanENTRY(ret_from_user_rt_signal) 128760d6e7861f245599e0ca1e98ba524a77d401a51Maxim Kuvyrkov movel #__NR_rt_sigreturn,%d0 1292d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan trap #0 1302d7f16d6d12682c41fb287ea8261df8e4679f638Wilson Callan 131