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 >
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
2006-01-03 20:28:33 +03:00
SECTIONS
{
2005-10-30 00:44:56 +04:00
# ifdef C O N F I G _ X I P _ K E R N E L
2006-01-03 20:28:33 +03:00
. = XIP_ 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 ) ;
2005-10-30 00:44:56 +04:00
# else
2006-01-03 20:28:33 +03:00
. = PAGE_ O F F S E T + T E X T _ O F F S E T ;
2005-10-30 00:44:56 +04:00
# endif
2007-05-08 18:15:45 +04:00
.text .head : {
2005-04-17 02:20:36 +04:00
_ stext = . ;
2007-05-08 18:15:45 +04:00
_ sinittext = . ;
* ( .text .head )
}
.init : { /* Init code and data */
2008-01-20 16:15:03 +03:00
INIT_ T E X T
2007-05-08 18:15:45 +04:00
_ einittext = . ;
2005-04-17 02:20:36 +04:00
_ _ 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 = . ;
2006-10-27 22:41:44 +04:00
INITCALLS
2005-04-17 02:20:36 +04:00
_ _ 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 = . ;
2007-02-10 12:44:44 +03:00
# ifdef C O N F I G _ B L K _ D E V _ I N I T R D
2005-04-17 02:20:36 +04:00
. = 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 = . ;
2007-02-10 12:44:44 +03:00
# endif
2007-05-02 21:27:12 +04:00
. = ALIGN( 4 0 9 6 ) ;
2005-04-17 02:20:36 +04:00
_ _ per_ c p u _ s t a r t = . ;
* ( .data .percpu )
2007-07-19 12:48:12 +04:00
* ( .data .percpu .shared_aligned )
2005-04-17 02:20:36 +04:00
_ _ 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 ;
2008-01-20 16:15:03 +03:00
INIT_ D A T A
2005-04-17 02:20:36 +04:00
. = 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 * /
2008-01-20 16:15:03 +03:00
EXIT_ T E X T
EXIT_ D A T A
2005-04-17 02:20:36 +04:00
* ( .exitcall .exit )
2006-06-21 23:38:17 +04:00
# ifndef C O N F I G _ M M U
* ( .fixup )
* ( _ _ ex_ t a b l e )
# endif
2005-04-17 02:20:36 +04:00
}
.text : { /* Real text segment */
_ text = . ; /* Text and read-only data */
2007-03-02 18:01:36 +03:00
_ _ exception_ t e x t _ s t a r t = . ;
* ( .exception .text )
_ _ exception_ t e x t _ e n d = . ;
2007-05-13 02:31:33 +04:00
TEXT_ T E X T
2005-04-17 02:20:36 +04:00
SCHED_ T E X T
LOCK_ T E X T
2007-12-03 23:27:56 +03:00
KPROBES_ T E X T
2006-06-21 23:38:17 +04:00
# ifdef C O N F I G _ M M U
2005-04-17 02:20:36 +04:00
* ( .fixup )
2006-06-21 23:38:17 +04:00
# endif
2005-04-17 02:20:36 +04:00
* ( .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 */
2006-01-03 20:28:33 +03:00
. = PAGE_ O F F S E T + T E X T _ O F F S E T ;
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 .
* /
2007-05-08 15:39:37 +04:00
* ( .data .init_task )
2005-04-17 02:20:36 +04:00
# 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 = . ;
2008-01-20 16:15:03 +03:00
INIT_ D A T A
2005-04-17 02:20:36 +04:00
. = 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 = . ;
2006-06-21 23:38:17 +04:00
# ifdef C O N F I G _ M M U
2005-10-14 01:04:37 +04:00
* ( _ _ ex_ t a b l e )
2006-06-21 23:38:17 +04:00
# endif
2005-10-14 01:04:37 +04:00
_ _ 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
* /
2007-05-17 15:38:44 +04:00
DATA_ D A T A
2005-04-17 02:20:36 +04:00
CONSTRUCTORS
_ edata = . ;
}
2007-02-22 18:18:09 +03:00
_ edata_ l o c = _ _ d a t a _ l o c + S I Z E O F ( . d a t a ) ;
2005-04-17 02:20:36 +04:00
.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 " )