2005-09-30 16:16:52 +10:00
# include < l i n u x / c o n f i g . h >
2005-11-05 10:36:59 +11:00
# ifdef C O N F I G _ P P C 6 4
2005-09-30 16:16:52 +10:00
# include < a s m / p a g e . h >
2005-11-05 10:36:59 +11:00
# else
# define P A G E _ S I Z E 4 0 9 6
# define K E R N E L B A S E C O N F I G _ K E R N E L _ S T A R T
# endif
2005-09-26 16:04:21 +10:00
# include < a s m - g e n e r i c / v m l i n u x . l d s . h >
2005-11-03 16:03:06 +11:00
ENTRY( _ s t e x t )
2005-09-30 16:16:52 +10:00
# ifdef C O N F I G _ P P C 6 4
OUTPUT_ A R C H ( p o w e r p c : c o m m o n 6 4 )
jiffies = j i f f i e s _ 6 4 ;
# else
2005-09-26 16:04:21 +10:00
OUTPUT_ A R C H ( p o w e r p c : c o m m o n )
jiffies = j i f f i e s _ 6 4 + 4 ;
2005-09-30 16:16:52 +10:00
# endif
2005-09-26 16:04:21 +10:00
SECTIONS
{
2005-09-30 16:16:52 +10:00
/* Sections to be discarded. */
/ DISCARD/ : {
* ( .exitcall .exit )
* ( .exit .data )
}
2005-11-03 16:03:06 +11:00
. = KERNELBASE;
2005-09-30 16:16:52 +10:00
2005-09-26 16:04:21 +10:00
/* Read-only sections, merged into text segment: */
2005-09-30 16:16:52 +10:00
.text : {
* ( .text .text . * )
2005-09-26 16:04:21 +10:00
SCHED_ T E X T
LOCK_ T E X T
2005-09-30 16:16:52 +10:00
KPROBES_ T E X T
2005-09-26 16:04:21 +10:00
* ( .fixup )
2005-09-30 16:16:52 +10:00
# ifdef C O N F I G _ P P C 3 2
2005-09-26 16:04:21 +10:00
* ( .got1 )
_ _ got2 _ s t a r t = . ;
* ( .got2 )
_ _ got2 _ e n d = . ;
2005-09-30 16:16:52 +10:00
# else
. = ALIGN( P A G E _ S I Z E ) ;
_ etext = . ;
# endif
2005-09-26 16:04:21 +10:00
}
2005-09-30 16:16:52 +10:00
# ifdef C O N F I G _ P P C 3 2
2005-09-26 16:04:21 +10:00
_ etext = . ;
PROVIDE ( e t e x t = . ) ;
RODATA
.fini : { * ( .fini ) } = 0
.ctors : { * ( .ctors ) }
.dtors : { * ( .dtors ) }
.fixup : { * ( .fixup ) }
2005-09-30 16:16:52 +10:00
# endif
2005-09-26 16:04:21 +10:00
_ _ ex_ t a b l e : {
_ _ start_ _ _ e x _ t a b l e = . ;
* ( _ _ ex_ t a b l e )
_ _ stop_ _ _ e x _ t a b l e = . ;
}
_ _ bug_ t a b l e : {
_ _ start_ _ _ b u g _ t a b l e = . ;
* ( _ _ bug_ t a b l e )
_ _ stop_ _ _ b u g _ t a b l e = . ;
}
2005-09-30 16:16:52 +10:00
# ifdef C O N F I G _ P P C 6 4
_ _ ftr_ f i x u p : {
_ _ start_ _ _ f t r _ f i x u p = . ;
* ( _ _ ftr_ f i x u p )
_ _ stop_ _ _ f t r _ f i x u p = . ;
}
RODATA
# endif
# ifdef C O N F I G _ P P C 3 2
2005-09-26 16:04:21 +10:00
/* Read-write section, merged into data segment: */
2005-10-10 22:38:46 +10:00
. = ALIGN( P A G E _ S I Z E ) ;
2005-10-06 13:28:31 +10:00
_ sdata = . ;
2005-09-26 16:04:21 +10:00
.data :
{
* ( .data )
* ( .data1 )
* ( .sdata )
* ( .sdata2 )
* ( .got .plt ) * ( .got )
* ( .dynamic )
CONSTRUCTORS
}
2005-10-10 22:38:46 +10:00
. = ALIGN( P A G E _ S I Z E ) ;
2005-09-26 16:04:21 +10:00
_ _ nosave_ b e g i n = . ;
.data_nosave : { * ( .data .nosave ) }
2005-10-10 22:38:46 +10:00
. = ALIGN( P A G E _ S I Z E ) ;
2005-09-26 16:04:21 +10:00
_ _ nosave_ e n d = . ;
. = ALIGN( 3 2 ) ;
.data .cacheline_aligned : { * ( .data .cacheline_aligned ) }
_ edata = . ;
PROVIDE ( e d a t a = . ) ;
. = ALIGN( 8 1 9 2 ) ;
.data .init_task : { * ( .data .init_task ) }
2005-10-10 22:38:46 +10:00
# endif
2005-09-26 16:04:21 +10:00
2005-09-30 16:16:52 +10:00
/* will be freed after init */
. = ALIGN( P A G E _ S I Z E ) ;
2005-09-26 16:04:21 +10:00
_ _ init_ b e g i n = . ;
.init .text : {
_ sinittext = . ;
* ( .init .text )
_ einittext = . ;
}
2005-09-30 16:16:52 +10:00
# ifdef C O N F I G _ P P C 3 2
2005-09-26 16:04:21 +10: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-09-30 16:16:52 +10:00
# endif
2005-09-26 16:04:21 +10:00
.init .data : {
* ( .init .data ) ;
_ _ vtop_ t a b l e _ b e g i n = . ;
* ( .vtop_fixup ) ;
_ _ vtop_ t a b l e _ e n d = . ;
_ _ ptov_ t a b l e _ b e g i n = . ;
* ( .ptov_fixup ) ;
_ _ ptov_ t a b l e _ e n d = . ;
}
2005-09-30 16:16:52 +10:00
2005-09-26 16:04:21 +10:00
. = ALIGN( 1 6 ) ;
2005-09-30 16:16:52 +10:00
.init .setup : {
_ _ setup_ s t a r t = . ;
* ( .init .setup )
_ _ setup_ e n d = . ;
}
2005-09-26 16:04:21 +10:00
.initcall .init : {
2005-09-30 16:16:52 +10:00
_ _ initcall_ s t a r t = . ;
2005-09-26 16:04:21 +10:00
* ( .initcall1 .init )
* ( .initcall2 .init )
* ( .initcall3 .init )
* ( .initcall4 .init )
* ( .initcall5 .init )
* ( .initcall6 .init )
* ( .initcall7 .init )
2005-09-30 16:16:52 +10:00
_ _ initcall_ e n d = . ;
2005-09-26 16:04:21 +10:00
}
2005-09-30 16:16:52 +10:00
.con_initcall .init : {
_ _ 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 = . ;
}
2005-09-26 16:04:21 +10:00
SECURITY_ I N I T
2005-09-30 16:16:52 +10:00
# ifdef C O N F I G _ P P C 3 2
2005-09-26 16:04:21 +10:00
_ _ start_ _ _ f t r _ f i x u p = . ;
_ _ ftr_ f i x u p : { * ( _ _ f t r _ f i x u p ) }
_ _ stop_ _ _ f t r _ f i x u p = . ;
2005-09-30 16:16:52 +10:00
# else
. = ALIGN( P A G E _ S I Z E ) ;
.init .ramfs : {
_ _ initramfs_ s t a r t = . ;
* ( .init .ramfs )
_ _ initramfs_ e n d = . ;
}
# endif
2005-09-26 16:04:21 +10:00
2005-09-30 16:16:52 +10:00
# ifdef C O N F I G _ P P C 3 2
2005-09-26 16:04:21 +10:00
. = ALIGN( 3 2 ) ;
2005-09-30 16:16:52 +10:00
# endif
.data .percpu : {
_ _ per_ c p u _ s t a r t = . ;
* ( .data .percpu )
_ _ per_ c p u _ e n d = . ;
}
2005-09-26 16:04:21 +10:00
2005-09-30 16:16:52 +10:00
. = ALIGN( P A G E _ S I Z E ) ;
2005-10-10 22:38:46 +10:00
# ifdef C O N F I G _ P P C 6 4
2005-09-30 16:16:52 +10:00
. = ALIGN( 1 6 3 8 4 ) ;
_ _ init_ e n d = . ;
/* freed after init ends here */
/* Read/write sections */
. = ALIGN( P A G E _ S I Z E ) ;
. = ALIGN( 1 6 3 8 4 ) ;
2005-10-10 22:38:46 +10:00
_ sdata = . ;
2005-09-30 16:16:52 +10:00
/* The initial task and kernel stack */
.data .init_task : {
* ( .data .init_task )
}
. = ALIGN( P A G E _ S I Z E ) ;
.data .page_aligned : {
* ( .data .page_aligned )
}
.data .cacheline_aligned : {
* ( .data .cacheline_aligned )
}
.data : {
* ( .data .data .rel * .toc1 )
* ( .branch_lt )
}
.opd : {
* ( .opd )
}
.got : {
_ _ toc_ s t a r t = . ;
* ( .got )
* ( .toc )
. = ALIGN( P A G E _ S I Z E ) ;
_ edata = . ;
}
. = ALIGN( P A G E _ S I Z E ) ;
# else
2005-09-26 16:04:21 +10:00
_ _ initramfs_ s t a r t = . ;
2005-09-30 16:16:52 +10:00
.init .ramfs : {
* ( .init .ramfs )
}
2005-09-26 16:04:21 +10:00
_ _ initramfs_ e n d = . ;
. = ALIGN( 4 0 9 6 ) ;
_ _ init_ e n d = . ;
. = ALIGN( 4 0 9 6 ) ;
_ sextratext = . ;
_ eextratext = . ;
_ _ bss_ s t a r t = . ;
2005-09-30 16:16:52 +10:00
# endif
2005-10-10 22:38:46 +10:00
2005-09-30 16:16:52 +10:00
.bss : {
_ _ bss_ s t a r t = . ;
2005-09-26 16:04:21 +10:00
* ( .sbss ) * ( .scommon )
* ( .dynbss )
* ( .bss )
* ( COMMON)
2005-09-30 16:16:52 +10:00
_ _ bss_ s t o p = . ;
2005-09-26 16:04:21 +10:00
}
2005-09-30 16:16:52 +10:00
# ifdef C O N F I G _ P P C 6 4
. = ALIGN( P A G E _ S I Z E ) ;
# endif
2005-09-26 16:04:21 +10:00
_ end = . ;
2005-09-30 16:16:52 +10:00
# ifdef C O N F I G _ P P C 3 2
2005-09-26 16:04:21 +10:00
PROVIDE ( e n d = . ) ;
2005-09-30 16:16:52 +10:00
# endif
2005-09-26 16:04:21 +10:00
}