@ -11,7 +11,26 @@
# include < l i n u x / l i n k a g e . h >
/ *
* Exception v e c t o r s .
* AArch6 4 e x c e p t i o n v e c t o r s :
* We h a v e f o u r t y p e s o f e x c e p t i o n s :
* - synchronous : traps, d a t a a b o r t s , u n d e f i n e d i n s t r u c t i o n s , . . .
* - IRQ : group 1 ( n o r m a l ) i n t e r r u p t s
* - FIQ : group 0 o r s e c u r e i n t e r r u p t s
* - SError : fatal s y s t e m e r r o r s
* There a r e e n t r i e s f o r a l l f o u r o f t h o s e f o r d i f f e r e n t c o n t e x t s :
* - from s a m e e x c e p t i o n l e v e l , w h e n u s i n g t h e S P _ E L 0 s t a c k p o i n t e r
* - from s a m e e x c e p t i o n l e v e l , w h e n u s i n g t h e S P _ E L x s t a c k p o i n t e r
* - from l o w e r e x c e p t i o n l e v e l , w h e n t h i s i s A A r c h64
* - from l o w e r e x c e p t i o n l e v e l , w h e n t h i s i s A A r c h32
* Each o f t h o s e 1 6 e n t r i e s h a v e s p a c e f o r 3 2 i n s t r u c t i o n s , e a c h e n t r y m u s t
* be 1 2 8 b y t e a l i g n e d , t h e w h o l e t a b l e m u s t b e 2 K a l i g n e d .
* The 3 2 i n s t r u c t i o n s a r e n o t e n o u g h t o s a v e a n d r e s t o r e a l l r e g i s t e r s a n d
* to b r a n c h t o t h e a c t u a l h a n d l e r , s o w e s p l i t t h i s u p :
* Each e n t r y s a v e s t h e L R , b r a n c h e s t o t h e s a v e r o u t i n e , t h e n t o t h e a c t u a l
* handler, t h e n t o t h e r e s t o r e r o u t i n e . T h e s a v e a n d r e s t o r e r o u t i n e s a r e
* each s p l i t i n h a l f a n d s t u f f e d i n t h e u n u s e d g a p b e t w e e n t h e e n t r i e s .
* Also a s w e d o n o t r u n a n y t h i n g i n a l o w e r e x c e p t i o n l e v e l , w e j u s t p r o v i d e
* the f i r s t 8 e n t r i e s f o r e x c e p t i o n s f r o m t h e s a m e E L .
* /
.align 11
.globl vectors
@ -22,52 +41,9 @@ vectors:
bl d o _ b a d _ s y n c
b e x c e p t i o n _ e x i t
.align 7 /* Current EL IRQ Thread */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ b a d _ i r q
b e x c e p t i o n _ e x i t
.align 7 /* Current EL FIQ Thread */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ b a d _ f i q
b e x c e p t i o n _ e x i t
.align 7 /* Current EL Error Thread */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ b a d _ e r r o r
b e x c e p t i o n _ e x i t
.align 7 /* Current EL Synchronous Handler */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ s y n c
b e x c e p t i o n _ e x i t
.align 7 /* Current EL IRQ Handler */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ i r q
b e x c e p t i o n _ e x i t
.align 7 /* Current EL FIQ Handler */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ f i q
b e x c e p t i o n _ e x i t
.align 7 /* Current EL Error Handler */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ e r r o r
b e x c e p t i o n _ e x i t
/ *
* Enter E x c e p t i o n .
* This w i l l s a v e t h e p r o c e s s o r s t a t e t h a t i s E L R / X 0 ~ X 3 0
* to t h e s t a c k f r a m e .
* Save ( m o s t o f ) t h e G P r e g i s t e r s t o t h e s t a c k f r a m e .
* This i s t h e f i r s t p a r t o f t h e s h a r e d r o u t i n e c a l l e d i n t o f r o m a l l e n t r i e s .
* /
_exception_entry :
stp x27 , x28 , [ s p , #- 16 ] !
@ -84,7 +60,19 @@ _exception_entry:
stp x5 , x6 , [ s p , #- 16 ] !
stp x3 , x4 , [ s p , #- 16 ] !
stp x1 , x2 , [ s p , #- 16 ] !
b _ s a v e _ e l _ r e g s / * j u m p t o t h e s e c o n d p a r t * /
.align 7 /* Current EL IRQ Thread */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ b a d _ i r q
b e x c e p t i o n _ e x i t
/ *
* Save e x c e p t i o n s p e c i f i c c o n t e x t : E S R a n d E L R , f o r a l l e x c e p t i o n l e v e l s .
* This i s t h e s e c o n d p a r t o f t h e s h a r e d r o u t i n e c a l l e d i n t o f r o m a l l e n t r i e s .
* /
_save_el_regs :
/* Could be running at EL3/EL2/EL1 */
switch_ e l x11 , 3 f , 2 f , 1 f
3 : mrs x1 , e s r _ e l 3
@ -100,16 +88,36 @@ _exception_entry:
mov x0 , s p
ret
.align 7 /* Current EL FIQ Thread */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ b a d _ f i q
/* falling through to _exception_exit */
/ *
* Restore t h e e x c e p t i o n r e t u r n a d d r e s s , f o r a l l e x c e p t i o n l e v e l s .
* This i s t h e f i r s t p a r t o f t h e s h a r e d r o u t i n e c a l l e d i n t o f r o m a l l e n t r i e s .
* /
exception_exit :
ldp x2 , x0 , [ s p ] ,#16
switch_ e l x11 , 3 f , 2 f , 1 f
3 : msr e l r _ e l 3 , x2
b 0 f
b _ r e s t o r e _ r e g s
2 : msr e l r _ e l 2 , x2
b 0 f
b _ r e s t o r e _ r e g s
1 : msr e l r _ e l 1 , x2
0 :
b _ r e s t o r e _ r e g s / * j u m p t o t h e s e c o n d p a r t * /
.align 7 /* Current EL Error Thread */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ b a d _ e r r o r
b e x c e p t i o n _ e x i t
/ *
* Restore t h e g e n e r a l p u r p o s e r e g i s t e r s f r o m t h e e x c e p t i o n s t a c k , t h e n r e t u r n .
* This i s t h e s e c o n d p a r t o f t h e s h a r e d r o u t i n e c a l l e d i n t o f r o m a l l e n t r i e s .
* /
_restore_regs :
ldp x1 , x2 , [ s p ] ,#16
ldp x3 , x4 , [ s p ] ,#16
ldp x5 , x6 , [ s p ] ,#16
@ -126,3 +134,27 @@ exception_exit:
ldp x27 , x28 , [ s p ] ,#16
ldp x29 , x30 , [ s p ] ,#16
eret
.align 7 /* Current EL (SP_ELx) Synchronous Handler */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ s y n c
b e x c e p t i o n _ e x i t
.align 7 /* Current EL (SP_ELx) IRQ Handler */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ i r q
b e x c e p t i o n _ e x i t
.align 7 /* Current EL (SP_ELx) FIQ Handler */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ f i q
b e x c e p t i o n _ e x i t
.align 7 /* Current EL (SP_ELx) Error Handler */
stp x29 , x30 , [ s p , #- 16 ] !
bl _ e x c e p t i o n _ e n t r y
bl d o _ e r r o r
b e x c e p t i o n _ e x i t