2008-11-30 08:44:32 +03:00
/* ld script for sparc32/sparc64 kernel */
2005-04-17 02:20:36 +04:00
# include < a s m - g e n e r i c / v m l i n u x . l d s . h >
2008-12-27 11:34:41 +03:00
2007-09-18 06:02:30 +04:00
# include < a s m / p a g e . h >
2008-12-27 11:34:41 +03:00
# include < a s m / t h r e a d _ i n f o . h >
2005-04-17 02:20:36 +04:00
2008-11-30 08:44:32 +03:00
# ifdef C O N F I G _ S P A R C 3 2
# define I N I T I A L _ A D D R E S S 0 x10 0 0 0 + S I Z E O F _ H E A D E R S
# define T E X T S T A R T 0 x f00 0 4 0 0 0
# define S M P _ C A C H E _ B Y T E S _ S H I F T 5
# else
# define S M P _ C A C H E _ B Y T E S _ S H I F T 6
# define I N I T I A L _ A D D R E S S 0 x40 0 0
# define T E X T S T A R T 0 x00 0 0 0 0 0 0 0 0 4 0 4 0 0 0
# endif
# define S M P _ C A C H E _ B Y T E S ( 1 < < S M P _ C A C H E _ B Y T E S _ S H I F T )
# ifdef C O N F I G _ S P A R C 3 2
2005-04-17 02:20:36 +04:00
OUTPUT_ F O R M A T ( " e l f32 - s p a r c " , " e l f32 - s p a r c " , " e l f32 - s p a r c " )
OUTPUT_ A R C H ( s p a r c )
ENTRY( _ s t a r t )
jiffies = j i f f i e s _ 6 4 + 4 ;
2008-11-30 08:44:32 +03:00
# else
/* sparc64 */
OUTPUT_ F O R M A T ( " e l f64 - s p a r c " , " e l f64 - s p a r c " , " e l f64 - s p a r c " )
OUTPUT_ A R C H ( s p a r c : v9 a )
ENTRY( _ s t a r t )
jiffies = j i f f i e s _ 6 4 ;
# endif
2005-04-17 02:20:36 +04:00
SECTIONS
{
2008-11-30 08:44:32 +03:00
/* swapper_low_pmd_dir is sparc64 only */
swapper_ l o w _ p m d _ d i r = 0 x00 0 0 0 0 0 0 0 0 4 0 2 0 0 0 ;
. = INITIAL_ A D D R E S S ;
.text TEXTSTART :
2007-09-18 06:02:30 +04:00
{
_ text = . ;
2009-04-26 06:11:08 +04:00
HEAD_ T E X T
2007-09-18 06:02:30 +04:00
TEXT_ T E X T
SCHED_ T E X T
LOCK_ T E X T
2008-11-30 08:44:32 +03:00
KPROBES_ T E X T
2007-09-18 06:02:30 +04:00
* ( .gnu .warning )
} = 0
_ etext = . ;
2008-11-30 08:44:32 +03:00
RO_ D A T A ( P A G E _ S I Z E )
2007-09-18 06:02:30 +04:00
.data : {
DATA_ D A T A
CONSTRUCTORS
}
.data1 : {
* ( .data1 )
}
2008-11-30 08:44:32 +03:00
. = ALIGN( S M P _ C A C H E _ B Y T E S ) ;
.data .cacheline_aligned : {
* ( .data .cacheline_aligned )
}
. = ALIGN( S M P _ C A C H E _ B Y T E S ) ;
.data .read_mostly : {
* ( .data .read_mostly )
}
2008-12-27 11:34:41 +03:00
/* End of data section */
2007-09-18 06:02:30 +04:00
_ edata = . ;
2008-12-27 11:34:41 +03:00
/* init_task */
. = ALIGN( T H R E A D _ S I Z E ) ;
.data .init_task : {
* ( .data .init_task )
}
2007-09-18 06:02:30 +04:00
.fixup : {
_ _ start_ _ _ f i x u p = . ;
* ( .fixup )
_ _ stop_ _ _ f i x u p = . ;
}
2008-11-30 08:44:32 +03:00
. = ALIGN( 1 6 ) ;
2007-09-18 06:02:30 +04: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 = . ;
}
NOTES
. = ALIGN( P A G E _ S I Z E ) ;
.init .text : {
2008-11-30 08:44:32 +03:00
_ _ init_ b e g i n = . ;
2007-09-18 06:02:30 +04:00
_ sinittext = . ;
2008-01-20 16:15:03 +03:00
INIT_ T E X T
2007-09-18 06:02:30 +04:00
_ einittext = . ;
}
_ _ init_ t e x t _ e n d = . ;
.init .data : {
2008-01-20 16:15:03 +03:00
INIT_ D A T A
2007-09-18 06:02:30 +04: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 = . ;
INITCALLS
2008-11-30 08:44:32 +03:00
_ _ initcall_ e n d = . ;
2007-09-18 06:02:30 +04: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 = . ;
}
SECURITY_ I N I T
2007-02-10 12:44:44 +03:00
2008-11-30 08:44:32 +03:00
. = ALIGN( 4 ) ;
.tsb_ldquad_phys_patch : {
_ _ tsb_ l d q u a d _ p h y s _ p a t c h = . ;
* ( .tsb_ldquad_phys_patch )
_ _ tsb_ l d q u a d _ p h y s _ p a t c h _ e n d = . ;
}
.tsb_phys_patch : {
_ _ tsb_ p h y s _ p a t c h = . ;
* ( .tsb_phys_patch )
_ _ tsb_ p h y s _ p a t c h _ e n d = . ;
}
.cpuid_patch : {
_ _ cpuid_ p a t c h = . ;
* ( .cpuid_patch )
_ _ cpuid_ p a t c h _ e n d = . ;
}
.sun4v_1insn_patch : {
_ _ sun4 v _ 1 i n s n _ p a t c h = . ;
* ( .sun4v_1insn_patch )
_ _ sun4 v _ 1 i n s n _ p a t c h _ e n d = . ;
}
.sun4v_2insn_patch : {
_ _ sun4 v _ 2 i n s n _ p a t c h = . ;
* ( .sun4v_2insn_patch )
_ _ sun4 v _ 2 i n s n _ p a t c h _ 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
2007-09-18 06:02:30 +04:00
. = ALIGN( P A G E _ S I Z E ) ;
.init .ramfs : {
2008-11-30 08:44:32 +03:00
_ _ initramfs_ s t a r t = . ;
2007-09-18 06:02:30 +04:00
* ( .init .ramfs )
2008-11-30 08:44:32 +03:00
_ _ initramfs_ e n d = . ;
2007-09-18 06:02:30 +04:00
}
2007-02-10 12:44:44 +03:00
# endif
2007-09-18 06:02:30 +04:00
PERCPU( P A G E _ S I Z E )
2008-11-30 08:44:32 +03:00
2007-09-18 06:02:30 +04:00
. = ALIGN( P A G E _ S I Z E ) ;
_ _ init_ e n d = . ;
_ _ bss_ s t a r t = . ;
.sbss : {
* ( .sbss )
2008-11-30 08:44:32 +03:00
* ( .scommon )
}
2007-09-18 06:02:30 +04:00
.bss : {
* ( .dynbss )
* ( .bss )
* ( COMMON)
}
_ end = . ;
2008-11-30 08:44:32 +03:00
2007-09-18 06:02:30 +04:00
/ DISCARD/ : {
2008-01-20 16:15:03 +03:00
EXIT_ T E X T
EXIT_ D A T A
2007-09-18 06:02:30 +04:00
* ( .exitcall .exit )
}
2005-12-29 00:22:54 +03:00
2007-09-18 06:02:30 +04:00
STABS_ D E B U G
DWARF_ D E B U G
2005-04-17 02:20:36 +04:00
}