2005-04-16 15:20:36 -07:00
/ *
* linux/ a r c h / a r m / l i b / g e t u s e r . S
*
* Copyright ( C ) 2 0 0 1 R u s s e l l K i n g
*
* This p r o g r a m i s f r e e s o f t w a r e ; you can redistribute it and/or modify
* it u n d e r t h e t e r m s o f t h e G N U G e n e r a l P u b l i c L i c e n s e v e r s i o n 2 a s
* published b y t h e F r e e S o f t w a r e F o u n d a t i o n .
*
* Idea f r o m x86 v e r s i o n , ( C ) C o p y r i g h t 1 9 9 8 L i n u s T o r v a l d s
*
* These f u n c t i o n s h a v e a n o n - s t a n d a r d c a l l i n t e r f a c e t o m a k e t h e m m o r e
* efficient, e s p e c i a l l y a s t h e y r e t u r n a n e r r o r v a l u e i n a d d i t i o n t o
* the " r e a l " r e t u r n v a l u e .
*
* _ _ get_ u s e r _ X
*
* Inputs : r0 c o n t a i n s t h e a d d r e s s
* Outputs : r0 i s t h e e r r o r c o d e
* r2 , r3 c o n t a i n s t h e z e r o - e x t e n d e d v a l u e
* lr c o r r u p t e d
*
* No o t h e r r e g i s t e r s m u s t b e a l t e r e d . ( s e e i n c l u d e / a s m - a r m / u a c c e s s . h
* for s p e c i f i c A S M r e g i s t e r u s a g e ) .
*
* Note t h a t A D D R _ L I M I T i s e i t h e r 0 o r 0 x c00 0 0 0 0 0 .
* Note a l s o t h a t i t i s i n t e n d e d t h a t _ _ g e t _ u s e r _ b a d i s n o t g l o b a l .
* /
2005-09-09 21:08:59 +02:00
# include < a s m / a s m - o f f s e t s . h >
2005-04-16 15:20:36 -07:00
# include < a s m / t h r e a d _ i n f o . h >
# include < a s m / e r r n o . h >
.global __get_user_1
__get_user_1 :
1 : ldrbt r2 , [ r0 ]
mov r0 , #0
mov p c , l r
.global __get_user_2
__get_user_2 :
2 : ldrbt r2 , [ r0 ] , #1
3 : ldrbt r3 , [ r0 ]
# ifndef _ _ A R M E B _ _
orr r2 , r2 , r3 , l s l #8
# else
orr r2 , r3 , r2 , l s l #8
# endif
mov r0 , #0
mov p c , l r
.global __get_user_4
__get_user_4 :
4 : ldrt r2 , [ r0 ]
mov r0 , #0
mov p c , l r
__get_user_bad :
mov r2 , #0
mov r0 , #- E F A U L T
mov p c , l r
.section _ _ ex_ t a b l e , " a "
.long 1 b, _ _ g e t _ u s e r _ b a d
.long 2 b, _ _ g e t _ u s e r _ b a d
.long 3 b, _ _ g e t _ u s e r _ b a d
.long 4 b, _ _ g e t _ u s e r _ b a d
.previous