Home | History | Annotate | Line # | Download | only in conf
kern.ldscript revision 1.11.12.1
      1        1.6      ryo #include "assym.h"
      2        1.6      ryo 
      3        1.1     matt /* Default linker script, for normal executables */
      4        1.1     matt OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
      5        1.1     matt 	      "elf64-littleaarch64")
      6        1.1     matt OUTPUT_ARCH(aarch64)
      7        1.1     matt ENTRY(_start)
      8        1.8     maxv 
      9        1.1     matt SECTIONS
     10        1.1     matt {
     11        1.8     maxv 	.text :
     12        1.8     maxv 	{
     13        1.9     maxv 		PROVIDE(__kernel_text = .);
     14  1.11.12.1  thorpej 		PROVIDE(kernel_text = .);
     15        1.8     maxv 		*(.text)
     16        1.9     maxv 		*(.text.*)
     17        1.9     maxv 		*(.stub)
     18        1.8     maxv 	} =0
     19        1.8     maxv 
     20        1.8     maxv 	/* Move .rodata to the next L2 block to set unexecutable */
     21        1.9     maxv 	. = ALIGN(L2_SIZE);
     22        1.9     maxv 
     23        1.9     maxv 	PROVIDE(__rodata_start = .);
     24        1.9     maxv 	.rodata :
     25        1.9     maxv 	{
     26        1.9     maxv 		*(.rodata)
     27        1.9     maxv 		*(.rodata.*)
     28       1.11     maxv 		. = ALIGN(64);
     29       1.11     maxv 		__CTOR_LIST__ = .;
     30       1.11     maxv 		*(.ctors)
     31       1.11     maxv 		*(.init_array)
     32       1.11     maxv 		__CTOR_END__ = .;
     33        1.9     maxv 	}
     34        1.9     maxv 
     35        1.9     maxv 	PROVIDE(_etext = .);
     36        1.9     maxv 	PROVIDE(etext = .);
     37        1.8     maxv 
     38        1.8     maxv 	/*
     39        1.8     maxv 	 * Adjust the address for the data segment. Move .data to the next
     40        1.8     maxv 	 * L2 block, and .text and .rodata will be set readonly if needed.
     41        1.8     maxv 	 */
     42        1.9     maxv 	PROVIDE(_erodata = .);
     43        1.9     maxv 	. = ALIGN(L2_SIZE);
     44        1.9     maxv 
     45        1.9     maxv 	.data :
     46        1.8     maxv 	{
     47        1.9     maxv 		PROVIDE(__data_start = .);
     48        1.9     maxv 		*(.data)
     49        1.8     maxv 	}
     50        1.8     maxv 
     51       1.10    skrll 	. = ALIGN(COHERENCY_UNIT);
     52        1.8     maxv 	.data.cacheline_aligned :
     53        1.8     maxv 	{
     54        1.8     maxv 		*(.data.cacheline_aligned)
     55        1.8     maxv 	}
     56       1.10    skrll 	. = ALIGN(COHERENCY_UNIT);
     57        1.8     maxv 	.data.read_mostly :
     58        1.8     maxv 	{
     59        1.8     maxv 		*(.data.read_mostly)
     60        1.8     maxv 	}
     61       1.10    skrll 	. = ALIGN(COHERENCY_UNIT);
     62        1.8     maxv 
     63        1.9     maxv 	_edata = .;
     64        1.9     maxv 	PROVIDE (edata = .);
     65        1.8     maxv 
     66        1.8     maxv 	__bss_start = .;
     67        1.8     maxv 	__bss_start__ = .;
     68        1.8     maxv 	.bss :
     69        1.8     maxv 	{
     70        1.9     maxv 		*(.bss)
     71        1.9     maxv 		*(.bss.*)
     72        1.8     maxv 		*(COMMON)
     73        1.8     maxv 
     74        1.8     maxv 		/*
     75        1.8     maxv 		 * Align here to ensure that the .bss section occupies space
     76        1.8     maxv 		 * up to _end. Align after .bss to ensure correct alignment
     77        1.8     maxv 		 * even if the .bss section disappears because there are no
     78        1.8     maxv 		 * input sections.
     79        1.8     maxv 		 *
     80        1.8     maxv 		 * FIXME: Why do we need it? When there is no .bss section,
     81        1.8     maxv 		 * we don't pad the .data section.
     82        1.8     maxv 		 */
     83        1.8     maxv 		. = ALIGN(. != 0 ? 32 / 8 : 1);
     84        1.8     maxv 	}
     85        1.9     maxv 	_bss_end__ = . ;
     86        1.9     maxv 	__bss_end__ = . ;
     87        1.8     maxv 	. = ALIGN(32 / 8);
     88        1.8     maxv 
     89        1.8     maxv 	__end__ = . ;
     90        1.9     maxv 	_end = .;
     91        1.9     maxv 	PROVIDE(end = .);
     92        1.1     matt }
     93