2005-04-16 15:20:36 -07:00
/ * ld s c r i p t t o m a k e s39 0 L i n u x k e r n e l
* Written b y M a r t i n S c h w i d e f s k y ( s c h w i d e f s k y @de.ibm.com)
* /
# include < a s m - g e n e r i c / v m l i n u x . l d s . h >
2006-01-06 00:19:28 -08:00
# ifndef C O N F I G _ 6 4 B I T
2005-04-16 15:20:36 -07:00
OUTPUT_ F O R M A T ( " e l f32 - s39 0 " , " e l f32 - s39 0 " , " e l f32 - s39 0 " )
OUTPUT_ A R C H ( s39 0 )
ENTRY( _ s t a r t )
jiffies = j i f f i e s _ 6 4 + 4 ;
# else
OUTPUT_ F O R M A T ( " e l f64 - s39 0 " , " e l f64 - s39 0 " , " e l f64 - s39 0 " )
OUTPUT_ A R C H ( s39 0 : 6 4 - b i t )
ENTRY( _ s t a r t )
jiffies = j i f f i e s _ 6 4 ;
# endif
SECTIONS
{
. = 0 x0 0 0 0 0 0 0 0 ;
_ text = . ; /* Text and read-only data */
.text : {
2007-07-27 12:29:13 +02:00
* ( .text .head )
2007-05-13 00:31:33 +02:00
TEXT_ T E X T
2005-04-16 15:20:36 -07:00
SCHED_ T E X T
LOCK_ T E X T
2006-09-20 15:58:39 +02:00
KPROBES_ T E X T
2005-04-16 15:20:36 -07:00
* ( .fixup )
* ( .gnu .warning )
} = 0 x0 7 0 0
_ etext = . ; /* End of text section */
RODATA
# ifdef C O N F I G _ S H A R E D _ K E R N E L
. = ALIGN( 1 0 4 8 5 7 6 ) ; /* VM shared segments are 1MB aligned */
2007-02-05 21:18:41 +01:00
# endif
2005-04-16 15:20:36 -07:00
2007-02-05 21:18:41 +01:00
. = ALIGN( 4 0 9 6 ) ;
2005-04-16 15:20:36 -07:00
_ eshared = . ; /* End of shareable data */
2007-02-05 21:18:24 +01:00
. = ALIGN( 1 6 ) ; /* Exception table */
_ _ start_ _ _ e x _ t a b l e = . ;
_ _ ex_ t a b l e : { * ( _ _ e x _ t a b l e ) }
_ _ stop_ _ _ e x _ t a b l e = . ;
2007-07-19 01:48:39 -07:00
NOTES
2007-04-27 16:01:42 +02:00
BUG_ T A B L E
2005-04-16 15:20:36 -07:00
.data : { /* Data */
2007-05-17 13:38:44 +02:00
DATA_ D A T A
2005-04-16 15:20:36 -07:00
CONSTRUCTORS
}
. = ALIGN( 4 0 9 6 ) ;
_ _ nosave_ b e g i n = . ;
.data_nosave : { * ( .data .nosave ) }
. = ALIGN( 4 0 9 6 ) ;
_ _ nosave_ e n d = . ;
. = ALIGN( 4 0 9 6 ) ;
.data .page_aligned : { * ( .data .idt ) }
2006-04-27 18:40:24 -07:00
. = ALIGN( 2 5 6 ) ;
2005-04-16 15:20:36 -07:00
.data .cacheline_aligned : { * ( .data .cacheline_aligned ) }
2006-04-27 18:40:24 -07:00
. = ALIGN( 2 5 6 ) ;
.data .read_mostly : { * ( .data .read_mostly ) }
2005-04-16 15:20:36 -07:00
_ edata = . ; /* End of data section */
. = ALIGN( 8 1 9 2 ) ; /* init_task */
.data .init_task : { * ( .data .init_task ) }
/* will be freed after init */
. = ALIGN( 4 0 9 6 ) ; /* Init code and data */
_ _ init_ b e g i n = . ;
.init .text : {
_ sinittext = . ;
* ( .init .text )
_ einittext = . ;
}
2007-04-27 16:01:42 +02:00
/ *
* .exit .text is discarded a t r u n t i m e , n o t l i n k t i m e ,
* to d e a l w i t h r e f e r e n c e s f r o m _ _ b u g _ t a b l e
* /
.exit .text : { * ( .exit .text ) }
2005-04-16 15:20:36 -07:00
.init .data : { * ( .init .data ) }
. = ALIGN( 2 5 6 ) ;
_ _ setup_ s t a r t = . ;
.init .setup : { * ( .init .setup ) }
_ _ setup_ e n d = . ;
_ _ initcall_ s t a r t = . ;
.initcall .init : {
2006-10-27 11:41:44 -07:00
INITCALLS
2005-04-16 15:20:36 -07:00
}
_ _ initcall_ e n d = . ;
_ _ con_ i n i t c a l l _ s t a r t = . ;
.con_initcall .init : { * ( .con_initcall .init ) }
_ _ con_ i n i t c a l l _ e n d = . ;
SECURITY_ I N I T
2007-02-10 01:44:44 -08:00
# ifdef C O N F I G _ B L K _ D E V _ I N I T R D
2005-04-16 15:20:36 -07:00
. = ALIGN( 2 5 6 ) ;
_ _ initramfs_ s t a r t = . ;
.init .ramfs : { * ( .init .initramfs ) }
. = ALIGN( 2 ) ;
_ _ initramfs_ e n d = . ;
2007-02-10 01:44:44 -08:00
# endif
2007-07-19 01:48:12 -07:00
PERCPU( 4 0 9 6 )
2005-04-16 15:20:36 -07:00
. = ALIGN( 4 0 9 6 ) ;
_ _ init_ e n d = . ;
/* freed after init ends here */
_ _ bss_ s t a r t = . ; /* BSS */
.bss : { * ( .bss ) }
. = ALIGN( 2 ) ;
_ _ bss_ s t o p = . ;
_ end = . ;
/* Sections to be discarded */
/ DISCARD/ : {
2007-04-27 16:01:42 +02:00
* ( .exit .data ) * ( .exitcall .exit )
2005-04-16 15:20:36 -07:00
}
/* 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 ) }
}