2005-04-17 02:20:36 +04:00
/ * ld s c r i p t t o m a k e A R M L i n u x k e r n e l
* taken f r o m t h e i 3 8 6 v e r s i o n b y R u s s e l l K i n g
* Written b y M a r t i n M a r e s < m j @atrey.karlin.mff.cuni.cz>
* /
# include < a s m - g e n e r i c / v m l i n u x . l d s . h >
# include < l i n u x / c o n f i g . h >
2005-05-05 16:11:00 +04:00
# include < a s m / t h r e a d _ i n f o . h >
2005-10-30 00:44:56 +04:00
# include < a s m / m e m o r y . h >
2005-04-17 02:20:36 +04:00
OUTPUT_ A R C H ( a r m )
ENTRY( s t e x t )
2005-10-30 00:44:56 +04:00
2005-04-17 02:20:36 +04:00
# ifndef _ _ A R M E B _ _
jiffies = j i f f i e s _ 6 4 ;
# else
jiffies = j i f f i e s _ 6 4 + 4 ;
# endif
2005-10-30 00:44:56 +04:00
# ifdef C O N F I G _ X I P _ K E R N E L
# define T E X T A D D R X I P _ V I R T _ A D D R ( C O N F I G _ X I P _ P H Y S _ A D D R )
# else
# define T E X T A D D R K E R N E L _ R A M _ A D D R
# endif
2005-04-17 02:20:36 +04:00
SECTIONS
{
. = TEXTADDR;
.init : { /* Init code and data */
_ stext = . ;
_ sinittext = . ;
* ( .init .text )
_ einittext = . ;
_ _ proc_ i n f o _ b e g i n = . ;
2005-09-20 19:35:03 +04:00
* ( .proc .info .init )
2005-04-17 02:20:36 +04:00
_ _ proc_ i n f o _ e n d = . ;
_ _ arch_ i n f o _ b e g i n = . ;
2005-09-20 19:45:20 +04:00
* ( .arch .info .init )
2005-04-17 02:20:36 +04:00
_ _ arch_ i n f o _ e n d = . ;
_ _ tagtable_ b e g i n = . ;
2005-09-20 19:20:49 +04:00
* ( .taglist .init )
2005-04-17 02:20:36 +04:00
_ _ tagtable_ e n d = . ;
. = ALIGN( 1 6 ) ;
_ _ setup_ s t a r t = . ;
* ( .init .setup )
_ _ setup_ e n d = . ;
_ _ early_ b e g i n = . ;
2005-09-20 19:25:12 +04:00
* ( .early_param .init )
2005-04-17 02:20:36 +04:00
_ _ early_ e n d = . ;
_ _ initcall_ s t a r t = . ;
* ( .initcall1 .init )
* ( .initcall2 .init )
* ( .initcall3 .init )
* ( .initcall4 .init )
* ( .initcall5 .init )
* ( .initcall6 .init )
* ( .initcall7 .init )
_ _ initcall_ e n d = . ;
_ _ con_ i n i t c a l l _ s t a r t = . ;
* ( .con_initcall .init )
_ _ con_ i n i t c a l l _ e n d = . ;
_ _ security_ i n i t c a l l _ s t a r t = . ;
* ( .security_initcall .init )
_ _ security_ i n i t c a l l _ e n d = . ;
. = ALIGN( 3 2 ) ;
_ _ initramfs_ s t a r t = . ;
usr/ b u i l t - i n . o ( . i n i t . r a m f s )
_ _ initramfs_ e n d = . ;
. = ALIGN( 6 4 ) ;
_ _ per_ c p u _ s t a r t = . ;
* ( .data .percpu )
_ _ per_ c p u _ e n d = . ;
# ifndef C O N F I G _ X I P _ K E R N E L
_ _ init_ b e g i n = _ s t e x t ;
* ( .init .data )
. = ALIGN( 4 0 9 6 ) ;
_ _ init_ e n d = . ;
# endif
}
/ DISCARD/ : { / * E x i t c o d e a n d d a t a * /
* ( .exit .text )
* ( .exit .data )
* ( .exitcall .exit )
}
.text : { /* Real text segment */
_ text = . ; /* Text and read-only data */
* ( .text )
SCHED_ T E X T
LOCK_ T E X T
* ( .fixup )
* ( .gnu .warning )
* ( .rodata )
* ( .rodata . * )
* ( .glue_7 )
* ( .glue_7t )
* ( .got ) /* Global offset table */
}
RODATA
_ etext = . ; /* End of text and rodata section */
# ifdef C O N F I G _ X I P _ K E R N E L
_ _ data_ l o c = A L I G N ( 4 ) ; /* location in binary */
2005-10-30 00:44:56 +04:00
. = KERNEL_ R A M _ A D D R ;
2005-04-17 02:20:36 +04:00
# else
2005-05-05 16:11:00 +04:00
. = ALIGN( T H R E A D _ S I Z E ) ;
2005-04-17 02:20:36 +04:00
_ _ data_ l o c = . ;
# endif
.data : AT( _ _ d a t a _ l o c ) {
_ _ data_ s t a r t = . ; /* address in memory */
/ *
* first, t h e i n i t t a s k u n i o n , a l i g n e d
* to a n 8 1 9 2 b y t e b o u n d a r y .
* /
* ( .init .task )
# ifdef C O N F I G _ X I P _ K E R N E L
. = ALIGN( 4 0 9 6 ) ;
_ _ init_ b e g i n = . ;
* ( .init .data )
. = ALIGN( 4 0 9 6 ) ;
_ _ init_ e n d = . ;
# endif
. = ALIGN( 4 0 9 6 ) ;
_ _ nosave_ b e g i n = . ;
* ( .data .nosave )
. = ALIGN( 4 0 9 6 ) ;
_ _ nosave_ e n d = . ;
/ *
* then t h e c a c h e l i n e a l i g n e d d a t a
* /
. = ALIGN( 3 2 ) ;
* ( .data .cacheline_aligned )
2005-10-14 01:04:37 +04:00
/ *
* The e x c e p t i o n f i x u p t a b l e ( m i g h t n e e d r e s o r t i n g a t r u n t i m e )
* /
. = ALIGN( 3 2 ) ;
_ _ start_ _ _ e x _ t a b l e = . ;
* ( _ _ ex_ t a b l e )
_ _ stop_ _ _ e x _ t a b l e = . ;
2005-04-17 02:20:36 +04:00
/ *
* and t h e u s u a l d a t a s e c t i o n
* /
* ( .data )
CONSTRUCTORS
_ edata = . ;
}
.bss : {
_ _ bss_ s t a r t = . ; /* BSS */
* ( .bss )
* ( COMMON)
_ end = . ;
}
/* Stabs debugging sections. */
.stab 0 : { * ( .stab ) }
.stabstr 0 : { * ( .stabstr ) }
.stab .excl 0 : { * ( .stab .excl ) }
.stab .exclstr 0 : { * ( .stab .exclstr ) }
.stab .index 0 : { * ( .stab .index ) }
.stab .indexstr 0 : { * ( .stab .indexstr ) }
.comment 0 : { * ( .comment ) }
}
2005-11-17 19:43:14 +03:00
/ *
* These m u s t n e v e r b e e m p t y
* If y o u h a v e t o c o m m e n t t h e s e t w o a s s e r t s t a t e m e n t s o u t , y o u r
* binutils i s t o o o l d ( f o r o t h e r r e a s o n s a s w e l l )
* /
2005-04-17 02:20:36 +04:00
ASSERT( ( _ _ p r o c _ i n f o _ e n d - _ _ p r o c _ i n f o _ b e g i n ) , " m i s s i n g C P U s u p p o r t " )
ASSERT( ( _ _ a r c h _ i n f o _ e n d - _ _ a r c h _ i n f o _ b e g i n ) , " n o m a c h i n e r e c o r d d e f i n e d " )