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