2005-04-16 15:20:36 -07:00
# include < l i n u x / c o n f i g . h >
# include < a s m / c a c h e . h >
# include < a s m / p t r a c e . h >
# include < a s m / s y s t e m . h >
# include < a s m / p g t a b l e . h >
# define L O A D _ O F F S E T ( K E R N E L _ S T A R T - K E R N E L _ T R _ P A G E _ S I Z E )
# include < a s m - g e n e r i c / v m l i n u x . l d s . h >
2005-06-27 15:17:16 -07:00
# define I V T _ T E X T \
VMLINUX_ S Y M B O L ( _ _ s t a r t _ i v t _ t e x t ) = . ; \
* ( .text .ivt ) \
VMLINUX_ S Y M B O L ( _ _ e n d _ i v t _ t e x t ) = . ;
2005-04-16 15:20:36 -07:00
OUTPUT_ F O R M A T ( " e l f64 - i a64 - l i t t l e " )
OUTPUT_ A R C H ( i a64 )
ENTRY( p h y s _ s t a r t )
jiffies = j i f f i e s _ 6 4 ;
PHDRS {
code P T _ L O A D ;
percpu P T _ L O A D ;
data P T _ L O A D ;
}
SECTIONS
{
/* Sections to be discarded */
/ DISCARD/ : {
* ( .exit .text )
* ( .exit .data )
* ( .exitcall .exit )
* ( .IA_64 .unwind .exit .text )
* ( .IA_64 .unwind_info .exit .text )
}
v = P A G E _ O F F S E T ; /* this symbol is here to make debugging easier... */
phys_ s t a r t = _ s t a r t - L O A D _ O F F S E T ;
code : { } : c o d e
. = KERNEL_ S T A R T ;
_ text = . ;
_ stext = . ;
.text : AT( A D D R ( . t e x t ) - L O A D _ O F F S E T )
{
2005-06-27 15:17:16 -07:00
IVT_ T E X T
2005-04-16 15:20:36 -07:00
* ( .text )
SCHED_ T E X T
LOCK_ T E X T
2005-09-06 15:19:30 -07:00
KPROBES_ T E X T
2005-04-16 15:20:36 -07:00
* ( .gnu .linkonce .t * )
}
.text2 : AT( A D D R ( . t e x t 2 ) - L O A D _ O F F S E T )
{ * ( .text2 ) }
# ifdef C O N F I G _ S M P
.text .lock : AT( A D D R ( . t e x t . l o c k ) - L O A D _ O F F S E T )
{ * ( .text .lock ) }
# endif
_ etext = . ;
/* Read-only data */
/* Exception table */
. = ALIGN( 1 6 ) ;
_ _ ex_ t a b l e : A T ( A D D R ( _ _ e x _ t a b l e ) - L O A D _ O F F S E T )
{
_ _ start_ _ _ e x _ t a b l e = . ;
* ( _ _ ex_ t a b l e )
_ _ stop_ _ _ e x _ t a b l e = . ;
}
.data .patch .vtop : AT( A D D R ( . d a t a . p a t c h . v t o p ) - L O A D _ O F F S E T )
{
_ _ start_ _ _ v t o p _ p a t c h l i s t = . ;
* ( .data .patch .vtop )
_ _ end_ _ _ v t o p _ p a t c h l i s t = . ;
}
.data .patch .mckinley_e9 : AT( A D D R ( . d a t a . p a t c h . m c k i n l e y _ e 9 ) - L O A D _ O F F S E T )
{
_ _ start_ _ _ m c k i n l e y _ e 9 _ b u n d l e s = . ;
* ( .data .patch .mckinley_e9 )
_ _ end_ _ _ m c k i n l e y _ e 9 _ b u n d l e s = . ;
}
/* Global data */
_ data = . ;
# if d e f i n e d ( C O N F I G _ I A 6 4 _ G E N E R I C )
/* Machine Vector */
. = ALIGN( 1 6 ) ;
.machvec : AT( A D D R ( . m a c h v e c ) - L O A D _ O F F S E T )
{
machvec_ s t a r t = . ;
* ( .machvec )
machvec_ e n d = . ;
}
# endif
/* Unwind info & table: */
. = ALIGN( 8 ) ;
.IA_64 .unwind_info : AT( A D D R ( . I A _ 6 4 . u n w i n d _ i n f o ) - L O A D _ O F F S E T )
{ * ( .IA_64 .unwind_info * ) }
.IA_64 .unwind : AT( A D D R ( . I A _ 6 4 . u n w i n d ) - L O A D _ O F F S E T )
{
_ _ start_ u n w i n d = . ;
* ( .IA_64 .unwind * )
_ _ end_ u n w i n d = . ;
}
RODATA
.opd : AT( A D D R ( . o p d ) - L O A D _ O F F S E T )
{ * ( .opd ) }
/* Initialization code and data: */
. = ALIGN( P A G E _ S I Z E ) ;
_ _ init_ b e g i n = . ;
.init .text : AT( A D D R ( . i n i t . t e x t ) - L O A D _ O F F S E T )
{
_ sinittext = . ;
* ( .init .text )
_ einittext = . ;
}
.init .data : AT( A D D R ( . i n i t . d a t a ) - L O A D _ O F F S E T )
{ * ( .init .data ) }
.init .ramfs : AT( A D D R ( . i n i t . r a m f s ) - L O A D _ O F F S E T )
{
_ _ initramfs_ s t a r t = . ;
* ( .init .ramfs )
_ _ initramfs_ e n d = . ;
}
. = ALIGN( 1 6 ) ;
.init .setup : AT( A D D R ( . i n i t . s e t u p ) - L O A D _ O F F S E T )
{
_ _ setup_ s t a r t = . ;
* ( .init .setup )
_ _ setup_ e n d = . ;
}
.initcall .init : AT( A D D R ( . i n i t c a l l . i n i t ) - L O A D _ O F F S E T )
{
_ _ initcall_ s t a r t = . ;
* ( .initcall1 .init )
* ( .initcall2 .init )
* ( .initcall3 .init )
* ( .initcall4 .init )
* ( .initcall5 .init )
* ( .initcall6 .init )
* ( .initcall7 .init )
_ _ initcall_ e n d = . ;
}
_ _ con_ i n i t c a l l _ s t a r t = . ;
.con_initcall .init : AT( A D D R ( . c o n _ i n i t c a l l . i n i t ) - L O A D _ O F F S E 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 : AT( A D D R ( . s e c u r i t y _ i n i t c a l l . i n i t ) - L O A D _ O F F S E T )
{ * ( .security_initcall .init ) }
_ _ security_ i n i t c a l l _ e n d = . ;
. = ALIGN( P A G E _ S I Z E ) ;
_ _ init_ e n d = . ;
/* The initial task and kernel stack */
.data .init_task : AT( A D D R ( . d a t a . i n i t _ t a s k ) - L O A D _ O F F S E T )
{ * ( .data .init_task ) }
.data .page_aligned : AT( A D D R ( . d a t a . p a g e _ a l i g n e d ) - L O A D _ O F F S E T )
{ * ( _ _ special_ p a g e _ s e c t i o n )
_ _ start_ g a t e _ s e c t i o n = . ;
* ( .data .gate )
_ _ stop_ g a t e _ s e c t i o n = . ;
}
. = ALIGN( P A G E _ S I Z E ) ; /* make sure the gate page doesn't expose kernel data */
.data .cacheline_aligned : AT( A D D R ( . d a t a . c a c h e l i n e _ a l i g n e d ) - L O A D _ O F F S E T )
{ * ( .data .cacheline_aligned ) }
/* Per-cpu data: */
percpu : { } : p e r c p u
. = ALIGN( P E R C P U _ P A G E _ S I Z E ) ;
_ _ phys_ p e r _ c p u _ s t a r t = . ;
.data .percpu PERCPU_ADDR : AT( _ _ p h y s _ p e r _ c p u _ s t a r t - L O A D _ O F F S E T )
{
_ _ per_ c p u _ s t a r t = . ;
* ( .data .percpu )
_ _ per_ c p u _ e n d = . ;
}
. = _ _ phys_ p e r _ c p u _ s t a r t + P E R C P U _ P A G E _ S I Z E ; /* ensure percpu data fits into percpu page size */
data : { } : d a t a
.data : AT( A D D R ( . d a t a ) - L O A D _ O F F S E T )
{ * ( .data ) * ( .data1 ) * ( .gnu .linkonce .d * ) CONSTRUCTORS }
. = ALIGN( 1 6 ) ; /* gp must be 16-byte aligned for exc. table */
.got : AT( A D D R ( . g o t ) - L O A D _ O F F S E T )
{ * ( .got .plt ) * ( .got ) }
_ _ gp = A D D R ( . g o t ) + 0 x20 0 0 0 0 ;
/ * We w a n t t h e s m a l l d a t a s e c t i o n s t o g e t h e r , s o s i n g l e - i n s t r u c t i o n o f f s e t s
can a c c e s s t h e m a l l , a n d i n i t i a l i z e d d a t a a l l b e f o r e u n i n i t i a l i z e d , s o
we c a n s h o r t e n t h e o n - d i s k s e g m e n t s i z e . * /
.sdata : AT( A D D R ( . s d a t a ) - L O A D _ O F F S E T )
{ * ( .sdata ) * ( .sdata1 ) * ( .srdata ) }
_ edata = . ;
_ bss = . ;
.sbss : AT( A D D R ( . s b s s ) - L O A D _ O F F S E T )
{ * ( .sbss ) * ( .scommon ) }
.bss : AT( A D D R ( . b s s ) - L O A D _ O F F S E T )
{ * ( .bss ) * ( COMMON) }
_ end = . ;
code : { } : c o d e
/* 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 ) }
/ * DWARF d e b u g s e c t i o n s .
Symbols i n t h e D W A R F d e b u g g i n g s e c t i o n s a r e r e l a t i v e t o t h e b e g i n n i n g
of t h e s e c t i o n s o w e b e g i n t h e m a t 0 . * /
/* DWARF 1 */
.debug 0 : { * ( .debug ) }
.line 0 : { * ( .line ) }
/* GNU DWARF 1 extensions */
.debug_srcinfo 0 : { * ( .debug_srcinfo ) }
.debug_sfnames 0 : { * ( .debug_sfnames ) }
/* DWARF 1.1 and DWARF 2 */
.debug_aranges 0 : { * ( .debug_aranges ) }
.debug_pubnames 0 : { * ( .debug_pubnames ) }
/* DWARF 2 */
.debug_info 0 : { * ( .debug_info ) }
.debug_abbrev 0 : { * ( .debug_abbrev ) }
.debug_line 0 : { * ( .debug_line ) }
.debug_frame 0 : { * ( .debug_frame ) }
.debug_str 0 : { * ( .debug_str ) }
.debug_loc 0 : { * ( .debug_loc ) }
.debug_macinfo 0 : { * ( .debug_macinfo ) }
/* SGI/MIPS DWARF 2 extensions */
.debug_weaknames 0 : { * ( .debug_weaknames ) }
.debug_funcnames 0 : { * ( .debug_funcnames ) }
.debug_typenames 0 : { * ( .debug_typenames ) }
.debug_varnames 0 : { * ( .debug_varnames ) }
/* These must appear regardless of . */
/ * Discard t h e m f o r n o w s i n c e I n t e l S o f t S D V c a n n o t h a n d l e t h e m .
.comment 0 : { * ( .comment ) }
.note 0 : { * ( .note ) }
* /
/ DISCARD/ : { * ( . c o m m e n t ) }
/ DISCARD/ : { * ( . n o t e ) }
}