1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | #include <asm/vmlinux.lds.h> |
3 | #include <asm/page.h> |
4 | |
5 | OUTPUT_FORMAT(ELF_FORMAT) |
6 | OUTPUT_ARCH(ELF_ARCH) |
7 | ENTRY(_start) |
8 | jiffies = jiffies_64; |
9 | |
10 | VERSION { |
11 | { |
12 | local: *; |
13 | }; |
14 | } |
15 | |
16 | SECTIONS |
17 | { |
18 | /* This must contain the right address - not quite the default ELF one.*/ |
19 | PROVIDE (__executable_start = START); |
20 | /* Static binaries stick stuff here, like the sigreturn trampoline, |
21 | * invisibly to objdump. So, just make __binary_start equal to the very |
22 | * beginning of the executable, and if there are unmapped pages after this, |
23 | * they are forever unusable. |
24 | */ |
25 | __binary_start = START; |
26 | |
27 | . = START + SIZEOF_HEADERS; |
28 | . = ALIGN(PAGE_SIZE); |
29 | |
30 | _text = .; |
31 | INIT_TEXT_SECTION(0) |
32 | |
33 | .text : |
34 | { |
35 | _stext = .; |
36 | TEXT_TEXT |
37 | SCHED_TEXT |
38 | LOCK_TEXT |
39 | IRQENTRY_TEXT |
40 | SOFTIRQENTRY_TEXT |
41 | *(.fixup) |
42 | /* .gnu.warning sections are handled specially by elf32.em. */ |
43 | *(.gnu.warning) |
44 | *(.gnu.linkonce.t*) |
45 | } |
46 | |
47 | . = ALIGN(PAGE_SIZE); |
48 | .syscall_stub : { |
49 | __syscall_stub_start = .; |
50 | *(.__syscall_stub*) |
51 | __syscall_stub_end = .; |
52 | } |
53 | |
54 | /* |
55 | * These are needed even in a static link, even if they wind up being empty. |
56 | * Newer glibc needs these __rel{,a}_iplt_{start,end} symbols. |
57 | */ |
58 | .rel.plt : { |
59 | *(.rel.plt) |
60 | PROVIDE_HIDDEN(__rel_iplt_start = .); |
61 | *(.rel.iplt) |
62 | PROVIDE_HIDDEN(__rel_iplt_end = .); |
63 | } |
64 | .rela.plt : { |
65 | *(.rela.plt) |
66 | PROVIDE_HIDDEN(__rela_iplt_start = .); |
67 | *(.rela.iplt) |
68 | PROVIDE_HIDDEN(__rela_iplt_end = .); |
69 | } |
70 | |
71 | #include <asm/common.lds.S> |
72 | |
73 | __init_begin = .; |
74 | init.data : { INIT_DATA } |
75 | __init_end = .; |
76 | |
77 | .data : |
78 | { |
79 | INIT_TASK_DATA(KERNEL_STACK_SIZE) |
80 | . = ALIGN(KERNEL_STACK_SIZE); |
81 | *(.data..init_irqstack) |
82 | DATA_DATA |
83 | *(.gnu.linkonce.d*) |
84 | CONSTRUCTORS |
85 | } |
86 | .data1 : { *(.data1) } |
87 | .ctors : |
88 | { |
89 | *(.ctors) |
90 | } |
91 | .dtors : |
92 | { |
93 | *(.dtors) |
94 | } |
95 | |
96 | .got : { *(.got.plt) *(.got) } |
97 | .eh_frame : { KEEP (*(.eh_frame)) } |
98 | .dynamic : { *(.dynamic) } |
99 | .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } |
100 | .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } |
101 | /* We want the small data sections together, so single-instruction offsets |
102 | can access them all, and initialized data all before uninitialized, so |
103 | we can shorten the on-disk segment size. */ |
104 | .sdata : { *(.sdata) } |
105 | _edata = .; |
106 | PROVIDE (edata = .); |
107 | . = ALIGN(PAGE_SIZE); |
108 | __bss_start = .; |
109 | PROVIDE(_bss_start = .); |
110 | SBSS(0) |
111 | BSS(0) |
112 | __bss_stop = .; |
113 | _end = .; |
114 | PROVIDE (end = .); |
115 | |
116 | STABS_DEBUG |
117 | DWARF_DEBUG |
118 | ELF_DETAILS |
119 | |
120 | DISCARDS |
121 | } |
122 | |