entry.S 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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. #include <linux/sys.h>
  27. #include <linux/linkage.h>
  28. #include <asm/thread_info.h>
  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>
  34. #include <asm/unistd.h>
  35. .text
  36. .globl buserr
  37. .globl trap
  38. .globl ret_from_exception
  39. .globl ret_from_signal
  40. .globl sys_fork
  41. .globl sys_clone
  42. .globl sys_vfork
  43. ENTRY(buserr)
  44. SAVE_ALL
  45. moveq #-1,%d0
  46. movel %d0,%sp@(PT_ORIG_D0)
  47. movel %sp,%sp@- /* stack frame pointer argument */
  48. jsr buserr_c
  49. addql #4,%sp
  50. jra ret_from_exception
  51. ENTRY(trap)
  52. SAVE_ALL
  53. moveq #-1,%d0
  54. movel %d0,%sp@(PT_ORIG_D0)
  55. movel %sp,%sp@- /* stack frame pointer argument */
  56. jsr trap_c
  57. addql #4,%sp
  58. jra ret_from_exception
  59. #ifdef TRAP_DBG_INTERRUPT
  60. .globl dbginterrupt
  61. ENTRY(dbginterrupt)
  62. SAVE_ALL
  63. moveq #-1,%d0
  64. movel %d0,%sp@(PT_ORIG_D0)
  65. movel %sp,%sp@- /* stack frame pointer argument */
  66. jsr dbginterrupt_c
  67. addql #4,%sp
  68. jra ret_from_exception
  69. #endif
  70. ENTRY(reschedule)
  71. /* save top of frame */
  72. pea %sp@
  73. jbsr set_esp0
  74. addql #4,%sp
  75. pea ret_from_exception
  76. jmp schedule
  77. ENTRY(ret_from_fork)
  78. movel %d1,%sp@-
  79. jsr schedule_tail
  80. addql #4,%sp
  81. jra ret_from_exception
  82. ENTRY(sys_fork)
  83. SAVE_SWITCH_STACK
  84. pea %sp@(SWITCH_STACK_SIZE)
  85. jbsr m68k_fork
  86. addql #4,%sp
  87. RESTORE_SWITCH_STACK
  88. rts
  89. ENTRY(sys_vfork)
  90. SAVE_SWITCH_STACK
  91. pea %sp@(SWITCH_STACK_SIZE)
  92. jbsr m68k_vfork
  93. addql #4,%sp
  94. RESTORE_SWITCH_STACK
  95. rts
  96. ENTRY(sys_clone)
  97. SAVE_SWITCH_STACK
  98. pea %sp@(SWITCH_STACK_SIZE)
  99. jbsr m68k_clone
  100. addql #4,%sp
  101. RESTORE_SWITCH_STACK
  102. rts
  103. ENTRY(sys_sigsuspend)
  104. SAVE_SWITCH_STACK
  105. pea %sp@(SWITCH_STACK_SIZE)
  106. jbsr do_sigsuspend
  107. addql #4,%sp
  108. RESTORE_SWITCH_STACK
  109. rts
  110. ENTRY(sys_rt_sigsuspend)
  111. SAVE_SWITCH_STACK
  112. pea %sp@(SWITCH_STACK_SIZE)
  113. jbsr do_rt_sigsuspend
  114. addql #4,%sp
  115. RESTORE_SWITCH_STACK
  116. rts
  117. ENTRY(sys_sigreturn)
  118. SAVE_SWITCH_STACK
  119. jbsr do_sigreturn
  120. RESTORE_SWITCH_STACK
  121. rts
  122. ENTRY(sys_rt_sigreturn)
  123. SAVE_SWITCH_STACK
  124. jbsr do_rt_sigreturn
  125. RESTORE_SWITCH_STACK
  126. rts
  127. ENTRY(ret_from_user_signal)
  128. moveq #__NR_sigreturn,%d0
  129. trap #0
  130. ENTRY(ret_from_user_rt_signal)
  131. move #__NR_rt_sigreturn,%d0
  132. trap #0