原始版本
This commit is contained in:
96
RT_Thread/libcpu/ia32/trapisr_gcc.S
Normal file
96
RT_Thread/libcpu/ia32/trapisr_gcc.S
Normal file
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2006-09-15 QiuYi The first version.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup I386
|
||||
*/
|
||||
/*@{*/
|
||||
|
||||
#define ENTRY(proc)\
|
||||
.align 2;\
|
||||
.globl proc;\
|
||||
.type proc,@function;\
|
||||
proc:
|
||||
|
||||
#define TRAPFNC(name,num)\
|
||||
ENTRY(name)\
|
||||
pushl $(num);\
|
||||
jmp _traps;\
|
||||
.data;\
|
||||
.long name;\
|
||||
.text
|
||||
|
||||
#define TRAPFNC_NOEC(name,num)\
|
||||
ENTRY(name)\
|
||||
pushl $0;\
|
||||
pushl $(num);\
|
||||
jmp _traps;\
|
||||
.data;\
|
||||
.long name;\
|
||||
.text
|
||||
|
||||
.globl trap_func
|
||||
.data
|
||||
.align 4
|
||||
.type trap_func,@object
|
||||
trap_func :
|
||||
.text
|
||||
|
||||
/* CPU traps */
|
||||
TRAPFNC_NOEC(Xdivide, 0)
|
||||
TRAPFNC_NOEC(Xdebug, 1)
|
||||
TRAPFNC_NOEC(Xnmi, 2)
|
||||
TRAPFNC_NOEC(Xbrkpt, 3)
|
||||
TRAPFNC_NOEC(Xoflow, 4)
|
||||
TRAPFNC_NOEC(Xbound, 5)
|
||||
TRAPFNC_NOEC(Xillop, 6)
|
||||
TRAPFNC_NOEC(Xdevice, 7)
|
||||
TRAPFNC (Xdblflt, 8)
|
||||
TRAPFNC (Xtss, 9)
|
||||
TRAPFNC (Xsegnp, 10)
|
||||
TRAPFNC (Xstack, 11)
|
||||
TRAPFNC (Xgpflt, 12)
|
||||
TRAPFNC (Xpgflt, 13)
|
||||
TRAPFNC_NOEC(Xfperr, 14)
|
||||
TRAPFNC (Xalign, 15)
|
||||
|
||||
/* default handler -- not for any specific trap */
|
||||
TRAPFNC (Xdefault, 500)
|
||||
|
||||
.p2align 4,0x90
|
||||
.globl _traps
|
||||
.type _traps,@function
|
||||
.globl rt_interrupt_enter
|
||||
.globl rt_interrupt_leave
|
||||
|
||||
_traps:
|
||||
push %ds
|
||||
push %es
|
||||
pushal
|
||||
movw $0x10,%ax
|
||||
movw %ax,%ds
|
||||
movw %ax,%es
|
||||
pushl %esp
|
||||
call rt_interrupt_enter
|
||||
movl %esp, %eax
|
||||
addl $0x2c,%eax /*get trapno*/
|
||||
movl (%eax),%eax
|
||||
pushl %eax /*push trapno*/
|
||||
call rt_hw_trap_irq
|
||||
addl $4,%esp
|
||||
call rt_interrupt_leave
|
||||
popl %esp
|
||||
popal
|
||||
pop %es
|
||||
pop %ds
|
||||
add $8,%esp
|
||||
iret
|
||||
|
||||
/*@}*/
|
||||
Reference in New Issue
Block a user