trapisr_gcc.S 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2006-09-15 QiuYi The first version.
  9. */
  10. /**
  11. * @addtogroup I386
  12. */
  13. /*@{*/
  14. #define ENTRY(proc)\
  15. .align 2;\
  16. .globl proc;\
  17. .type proc,@function;\
  18. proc:
  19. #define TRAPFNC(name,num)\
  20. ENTRY(name)\
  21. pushl $(num);\
  22. jmp _traps;\
  23. .data;\
  24. .long name;\
  25. .text
  26. #define TRAPFNC_NOEC(name,num)\
  27. ENTRY(name)\
  28. pushl $0;\
  29. pushl $(num);\
  30. jmp _traps;\
  31. .data;\
  32. .long name;\
  33. .text
  34. .globl trap_func
  35. .data
  36. .align 4
  37. .type trap_func,@object
  38. trap_func :
  39. .text
  40. /* CPU traps */
  41. TRAPFNC_NOEC(Xdivide, 0)
  42. TRAPFNC_NOEC(Xdebug, 1)
  43. TRAPFNC_NOEC(Xnmi, 2)
  44. TRAPFNC_NOEC(Xbrkpt, 3)
  45. TRAPFNC_NOEC(Xoflow, 4)
  46. TRAPFNC_NOEC(Xbound, 5)
  47. TRAPFNC_NOEC(Xillop, 6)
  48. TRAPFNC_NOEC(Xdevice, 7)
  49. TRAPFNC (Xdblflt, 8)
  50. TRAPFNC (Xtss, 9)
  51. TRAPFNC (Xsegnp, 10)
  52. TRAPFNC (Xstack, 11)
  53. TRAPFNC (Xgpflt, 12)
  54. TRAPFNC (Xpgflt, 13)
  55. TRAPFNC_NOEC(Xfperr, 14)
  56. TRAPFNC (Xalign, 15)
  57. /* default handler -- not for any specific trap */
  58. TRAPFNC (Xdefault, 500)
  59. .p2align 4,0x90
  60. .globl _traps
  61. .type _traps,@function
  62. .globl rt_interrupt_enter
  63. .globl rt_interrupt_leave
  64. _traps:
  65. push %ds
  66. push %es
  67. pushal
  68. movw $0x10,%ax
  69. movw %ax,%ds
  70. movw %ax,%es
  71. pushl %esp
  72. call rt_interrupt_enter
  73. movl %esp, %eax
  74. addl $0x2c,%eax /*get trapno*/
  75. movl (%eax),%eax
  76. pushl %eax /*push trapno*/
  77. call rt_hw_trap_irq
  78. addl $4,%esp
  79. call rt_interrupt_leave
  80. popl %esp
  81. popal
  82. pop %es
  83. pop %ds
  84. add $8,%esp
  85. iret
  86. /*@}*/