2010-05-28 23:09:12 -04:00
# include < a s m - g e n e r i c / v m l i n u x . l d s . h >
# include < a s m / p a g e . h >
# include < a s m / c a c h e . h >
# include < a s m / t h r e a d _ i n f o . h >
# include < h v / h y p e r v i s o r . h >
/* Text loads starting from the supervisor interrupt vector address. */
2013-09-03 14:41:36 -04:00
# define T E X T _ O F F S E T M E M _ S V _ S T A R T
2010-05-28 23:09:12 -04:00
OUTPUT_ A R C H ( t i l e )
ENTRY( _ s t a r t )
jiffies = j i f f i e s _ 6 4 ;
PHDRS
{
2013-09-03 14:41:36 -04:00
intrpt P T _ L O A D ;
2010-05-28 23:09:12 -04:00
text P T _ L O A D ;
data P T _ L O A D ;
}
SECTIONS
{
/* Text is loaded with a different VA than data; start with text. */
# undef L O A D _ O F F S E T
# define L O A D _ O F F S E T T E X T _ O F F S E T
/* Interrupt vectors */
2013-09-03 14:41:36 -04:00
.intrpt ( LOAD_ O F F S E T ) : A T ( 0 ) / * p u t a t t h e s t a r t o f p h y s i c a l m e m o r y * /
2010-05-28 23:09:12 -04:00
{
_ text = . ;
2013-09-03 14:41:36 -04:00
* ( .intrpt )
} : intrpt =0
2010-05-28 23:09:12 -04:00
/* Hypervisor call vectors */
2013-08-07 16:03:08 -04:00
. = ALIGN( 0 x10 0 0 0 ) ;
.hvglue : AT ( A D D R ( . h v g l u e ) - L O A D _ O F F S E T ) {
* ( .hvglue )
} : NONE
2010-05-28 23:09:12 -04:00
/* Now the real code */
. = ALIGN( 0 x20 0 0 0 ) ;
2013-07-03 15:03:39 -07:00
_ stext = . ;
2010-05-28 23:09:12 -04:00
.text : AT ( A D D R ( . t e x t ) - L O A D _ O F F S E T ) {
2010-06-25 17:04:17 -04:00
HEAD_ T E X T
2010-05-28 23:09:12 -04:00
SCHED_ T E X T
LOCK_ T E X T
2013-08-09 15:08:57 -04:00
KPROBES_ T E X T
2013-08-09 13:26:09 -04:00
IRQENTRY_ T E X T
2010-05-28 23:09:12 -04:00
_ _ fix_ t e x t _ e n d = . ; /* tile-cpack won't rearrange before this */
2013-08-09 16:50:36 -04:00
ALIGN_ F U N C T I O N ( ) ;
* ( .hottext * )
2010-05-28 23:09:12 -04:00
TEXT_ T E X T
* ( .text . * )
* ( .coldtext * )
* ( .fixup )
* ( .gnu .warning )
2010-06-25 17:04:17 -04:00
} : text =0
2010-05-28 23:09:12 -04:00
_ etext = . ;
/* "Init" is divided into two areas with very different virtual addresses. */
INIT_ T E X T _ S E C T I O N ( P A G E _ S I Z E )
/* Now we skip back to PAGE_OFFSET for the data. */
. = ( . - TEXT_ O F F S E T + P A G E _ O F F S E T ) ;
# undef L O A D _ O F F S E T
# define L O A D _ O F F S E T P A G E _ O F F S E T
. = ALIGN( P A G E _ S I Z E ) ;
2013-07-03 15:03:39 -07:00
_ _ init_ b e g i n = . ;
2010-05-28 23:09:12 -04:00
VMLINUX_ S Y M B O L ( _ s i n i t d a t a ) = . ;
2011-02-27 18:52:24 -05:00
INIT_ D A T A _ S E C T I O N ( 1 6 ) : d a t a =0
2011-03-24 18:50:09 +01:00
PERCPU_ S E C T I O N ( L 2 _ C A C H E _ B Y T E S )
2010-05-28 23:09:12 -04:00
. = ALIGN( P A G E _ S I Z E ) ;
VMLINUX_ S Y M B O L ( _ e i n i t d a t a ) = . ;
2013-07-03 15:03:39 -07:00
_ _ init_ e n d = . ;
2010-05-28 23:09:12 -04:00
_ sdata = . ; /* Start of data section */
RO_ D A T A _ S E C T I O N ( P A G E _ S I Z E )
RW_ D A T A _ S E C T I O N ( L 2 _ C A C H E _ B Y T E S , P A G E _ S I Z E , T H R E A D _ S I Z E )
_ edata = . ;
EXCEPTION_ T A B L E ( L 2 _ C A C H E _ B Y T E S )
NOTES
BSS_ S E C T I O N ( 8 , P A G E _ S I Z E , 1 )
_ end = . ;
STABS_ D E B U G
DWARF_ D E B U G
DISCARDS
}