kern.ldscript revision 1.12 1 #include "assym.h"
2
3 /* Default linker script, for normal executables */
4 OUTPUT_FORMAT("elf64-littleaarch64", "elf64-bigaarch64",
5 "elf64-littleaarch64")
6 OUTPUT_ARCH(aarch64)
7 ENTRY(_start)
8
9 SECTIONS
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