Home | History | Annotate | Line # | Download | only in conf
      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.12    ryo 		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