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 >
2006-03-28 23:15:54 +11:00
# define P R O V I D E 3 2 ( x ) P R O V I D E ( _ _ u n u s e d _ _ ## x )
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
2006-03-28 23:15:54 +11:00
# define P R O V I D E 3 2 ( x ) P R O V I D E ( x )
2005-11-05 10:36:59 +11:00
# 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 >
2007-07-04 14:04:31 +10:00
# include < a s m / c a c h e . h >
2005-09-26 16:04:21 +10:00
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
{
2006-03-28 23:15:54 +11:00
/* Sections to be discarded. */
/ DISCARD/ : {
* ( .exitcall .exit )
* ( .exit .data )
}
2005-09-26 16:04:21 +10:00
2006-03-28 23:15:54 +11:00
. = KERNELBASE;
2005-09-26 16:04:21 +10:00
2006-03-28 23:15:54 +11:00
/ *
* Text, r e a d o n l y d a t a a n d o t h e r p e r m a n e n t r e a d - o n l y s e c t i o n s
* /
/* Text and gots */
.text : {
2006-12-07 02:14:04 +01:00
_ text = . ;
2007-05-13 00:31:33 +02:00
TEXT_ T E X T
2006-03-28 23:15:54 +11:00
SCHED_ T E X T
LOCK_ T E X T
KPROBES_ T E X T
* ( .fixup )
2005-09-26 16:04:21 +10:00
2006-03-28 23:15:54 +11:00
# ifdef C O N F I G _ P P C 3 2
* ( .got1 )
_ _ got2 _ s t a r t = . ;
* ( .got2 )
_ _ got2 _ e n d = . ;
# endif / * C O N F I G _ P P C 3 2 * /
. = ALIGN( P A G E _ S I Z E ) ;
_ etext = . ;
PROVIDE3 2 ( e t e x t = . ) ;
}
/* Read-only data */
RODATA
/* Exception & bug tables */
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 = . ;
}
2007-07-19 01:48:38 -07:00
NOTES
2006-12-08 03:30:41 -08:00
BUG_ T A B L E
2005-09-26 16:04:21 +10:00
2006-03-28 23:15:54 +11:00
/ *
* Init s e c t i o n s d i s c a r d e d a t r u n t i m e
* /
. = ALIGN( P A G E _ S I Z E ) ;
_ _ init_ b e g i n = . ;
.init .text : {
_ sinittext = . ;
* ( .init .text )
_ einittext = . ;
}
/ * .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 ) }
.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 = . ;
2006-05-19 17:04:48 +10:00
# ifdef C O N F I G _ P P C _ I S E R I E S
_ _ dt_ s t r i n g s _ s t a r t = . ;
* ( .dt_strings ) ;
_ _ dt_ s t r i n g s _ e n d = . ;
# endif
2006-03-28 23:15:54 +11:00
}
. = ALIGN( 1 6 ) ;
.init .setup : {
_ _ setup_ s t a r t = . ;
* ( .init .setup )
_ _ setup_ e n d = . ;
}
.initcall .init : {
_ _ initcall_ s t a r t = . ;
2006-10-27 11:41:44 -07:00
INITCALLS
2006-03-28 23:15:54 +11:00
_ _ initcall_ e n d = . ;
}
.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 = . ;
}
SECURITY_ I N I T
. = ALIGN( 8 ) ;
2005-09-30 16:16:52 +10:00
_ _ 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 = . ;
}
2006-09-25 18:19:00 +10:00
# ifdef C O N F I G _ P P C 6 4
. = ALIGN( 8 ) ;
_ _ fw_ f t r _ f i x u p : {
_ _ start_ _ _ f w _ f t r _ f i x u p = . ;
* ( _ _ fw_ f t r _ f i x u p )
_ _ stop_ _ _ f w _ f t r _ f i x u p = . ;
}
# endif
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
2006-03-28 23:15:54 +11:00
. = ALIGN( P A G E _ S I Z E ) ;
.init .ramfs : {
_ _ initramfs_ s t a r t = . ;
* ( .init .ramfs )
_ _ initramfs_ e n d = . ;
}
2007-02-10 01:44:44 -08:00
# endif
2007-05-02 19:27:12 +02:00
. = ALIGN( P A G E _ S I Z E ) ;
2006-03-28 23:15:54 +11:00
.data .percpu : {
_ _ per_ c p u _ s t a r t = . ;
* ( .data .percpu )
2007-07-19 01:48:12 -07:00
* ( .data .percpu .shared_aligned )
2006-03-28 23:15:54 +11:00
_ _ per_ c p u _ e n d = . ;
}
2005-09-26 16:04:21 +10:00
2006-03-28 23:15:54 +11:00
. = ALIGN( 8 ) ;
.machine .desc : {
_ _ machine_ d e s c _ s t a r t = . ;
* ( .machine .desc )
_ _ machine_ d e s c _ e n d = . ;
}
/* freed after init ends here */
. = ALIGN( P A G E _ S I Z E ) ;
_ _ init_ e n d = . ;
/ *
* And n o w t h e v a r i o u s r e a d / w r i t e d a t a
* /
. = ALIGN( P A G E _ S I Z E ) ;
_ sdata = . ;
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
2006-03-28 23:15:54 +11:00
.data :
{
2007-05-17 13:38:44 +02:00
DATA_ D A T A
2006-03-28 23:15:54 +11:00
* ( .sdata )
* ( .got .plt ) * ( .got )
}
2005-09-30 16:16:52 +10:00
# else
2006-03-28 23:15:54 +11:00
.data : {
2007-06-16 22:29:04 -04:00
DATA_ D A T A
* ( .data .rel * )
* ( .toc1 )
2006-03-28 23:15:54 +11:00
* ( .branch_lt )
}
2005-09-26 16:04:21 +10:00
2006-03-28 23:15:54 +11:00
.opd : {
* ( .opd )
}
.got : {
_ _ toc_ s t a r t = . ;
* ( .got )
* ( .toc )
}
2005-09-30 16:16:52 +10:00
# endif
2005-09-26 16:04:21 +10:00
2006-03-28 23:15:54 +11:00
. = ALIGN( P A G E _ S I Z E ) ;
_ edata = . ;
PROVIDE3 2 ( e d a t a = . ) ;
/* The initial task and kernel stack */
# ifdef C O N F I G _ P P C 3 2
. = ALIGN( 8 1 9 2 ) ;
2005-09-30 16:16:52 +10:00
# else
2006-03-28 23:15:54 +11:00
. = ALIGN( 1 6 3 8 4 ) ;
# endif
.data .init_task : {
* ( .data .init_task )
}
2005-09-26 16:04:21 +10:00
2006-03-28 23:15:54 +11:00
. = ALIGN( P A G E _ S I Z E ) ;
.data .page_aligned : {
* ( .data .page_aligned )
}
2005-09-26 16:04:21 +10:00
2006-03-28 23:15:54 +11:00
.data .cacheline_aligned : {
* ( .data .cacheline_aligned )
}
2005-09-26 16:04:21 +10:00
2007-07-04 14:04:31 +10:00
. = ALIGN( L 1 _ C A C H E _ B Y T E S ) ;
.data .read_mostly : {
* ( .data .read_mostly )
}
2006-03-28 23:15:54 +11:00
. = ALIGN( P A G E _ S I Z E ) ;
_ _ data_ n o s a v e : {
_ _ nosave_ b e g i n = . ;
* ( .data .nosave )
. = ALIGN( P A G E _ S I Z E ) ;
_ _ nosave_ e n d = . ;
}
2005-10-10 22:38:46 +10:00
2006-03-28 23:15:54 +11:00
/ *
* And f i n a l l y t h e b s s
* /
.bss : {
_ _ bss_ s t a r t = . ;
* ( .sbss ) * ( .scommon )
* ( .dynbss )
* ( .bss )
* ( COMMON)
_ _ bss_ s t o p = . ;
}
2005-09-26 16:04:21 +10:00
2006-03-28 23:15:54 +11:00
. = ALIGN( P A G E _ S I Z E ) ;
_ end = . ;
PROVIDE3 2 ( e n d = . ) ;
2005-09-26 16:04:21 +10:00
}