Blame view
include/asm-generic/vmlinux.lds.h
23.7 KB
ef53dae86 Improve vmlinux.l... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
/* * Helper macros to support writing architecture specific * linker scripts. * * A minimal linker scripts has following content: * [This is a sample, architectures may have special requiriements] * * OUTPUT_FORMAT(...) * OUTPUT_ARCH(...) * ENTRY(...) * SECTIONS * { * . = START; * __init_begin = .; |
7923f90ff vmlinux.lds.h update |
15 |
* HEAD_TEXT_SECTION |
ef53dae86 Improve vmlinux.l... |
16 17 |
* INIT_TEXT_SECTION(PAGE_SIZE) * INIT_DATA_SECTION(...) |
0415b00d1 percpu: Always al... |
18 |
* PERCPU_SECTION(CACHELINE_SIZE) |
ef53dae86 Improve vmlinux.l... |
19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
* __init_end = .; * * _stext = .; * TEXT_SECTION = 0 * _etext = .; * * _sdata = .; * RO_DATA_SECTION(PAGE_SIZE) * RW_DATA_SECTION(...) * _edata = .; * * EXCEPTION_TABLE(...) * NOTES * |
04e448d9a vmlinux.lds.h: re... |
33 |
* BSS_SECTION(0, 0, 0) |
ef53dae86 Improve vmlinux.l... |
34 35 |
* _end = .; * |
ef53dae86 Improve vmlinux.l... |
36 37 |
* STABS_DEBUG * DWARF_DEBUG |
023bf6f1b linker script: un... |
38 39 |
* * DISCARDS // must be the last |
ef53dae86 Improve vmlinux.l... |
40 41 42 43 44 45 46 47 48 49 |
* } * * [__init_begin, __init_end] is the init section that may be freed after init * [_stext, _etext] is the text section * [_sdata, _edata] is the data section * * Some of the included output section have their own set of constants. * Examples are: [__initramfs_start, __initramfs_end] for initramfs and * [__nosave_begin, __nosave_end] for the nosave data */ |
c80d471a4 Add new HEAD_TEXT... |
50 |
|
1da177e4c Linux-2.6.12-rc2 |
51 52 53 |
#ifndef LOAD_OFFSET #define LOAD_OFFSET 0 #endif |
9e1b9b807 module: make MODU... |
54 55 56 57 58 59 |
#ifndef SYMBOL_PREFIX #define VMLINUX_SYMBOL(sym) sym #else #define PASTE2(x,y) x##y #define PASTE(x,y) PASTE2(x,y) #define VMLINUX_SYMBOL(sym) PASTE(SYMBOL_PREFIX, sym) |
1da177e4c Linux-2.6.12-rc2 |
60 |
#endif |
6d30e3a89 kbuild: Avoid inc... |
61 62 |
/* Align . to a 8 byte boundary equals to maximum function alignment. */ #define ALIGN_FUNCTION() . = ALIGN(8) |
07fca0e57 tracing: Properly... |
63 64 65 66 |
/* * Align to a 32 byte boundary equal to the * alignment gcc 4.5 uses for a struct */ |
aab94339c of: Add support f... |
67 68 |
#define STRUCT_ALIGNMENT 32 #define STRUCT_ALIGN() . = ALIGN(STRUCT_ALIGNMENT) |
07fca0e57 tracing: Properly... |
69 |
|
eb8f68904 Use separate sect... |
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
/* The actual configuration determine if the init/exit sections * are handled as text/data or they can be discarded (which * often happens at runtime) */ #ifdef CONFIG_HOTPLUG #define DEV_KEEP(sec) *(.dev##sec) #define DEV_DISCARD(sec) #else #define DEV_KEEP(sec) #define DEV_DISCARD(sec) *(.dev##sec) #endif #ifdef CONFIG_HOTPLUG_CPU #define CPU_KEEP(sec) *(.cpu##sec) #define CPU_DISCARD(sec) #else #define CPU_KEEP(sec) #define CPU_DISCARD(sec) *(.cpu##sec) #endif |
1a3fb6d48 asm-generic/vmlix... |
89 |
#if defined(CONFIG_MEMORY_HOTPLUG) |
eb8f68904 Use separate sect... |
90 91 92 93 94 95 |
#define MEM_KEEP(sec) *(.mem##sec) #define MEM_DISCARD(sec) #else #define MEM_KEEP(sec) #define MEM_DISCARD(sec) *(.mem##sec) #endif |
8da3821ba ftrace: create __... |
96 |
#ifdef CONFIG_FTRACE_MCOUNT_RECORD |
4b3b4c5e6 ftrace: __start_m... |
97 98 |
#define MCOUNT_REC() . = ALIGN(8); \ VMLINUX_SYMBOL(__start_mcount_loc) = .; \ |
8da3821ba ftrace: create __... |
99 100 101 102 103 |
*(__mcount_loc) \ VMLINUX_SYMBOL(__stop_mcount_loc) = .; #else #define MCOUNT_REC() #endif |
eb8f68904 Use separate sect... |
104 |
|
2ed84eeb8 trace: rename unl... |
105 |
#ifdef CONFIG_TRACE_BRANCH_PROFILING |
45b797492 trace: consolidat... |
106 107 108 |
#define LIKELY_PROFILE() VMLINUX_SYMBOL(__start_annotated_branch_profile) = .; \ *(_ftrace_annotated_branch) \ VMLINUX_SYMBOL(__stop_annotated_branch_profile) = .; |
1f0d69a9f tracing: profile ... |
109 110 111 |
#else #define LIKELY_PROFILE() #endif |
2bcd521a6 trace: profile al... |
112 113 114 115 116 117 118 |
#ifdef CONFIG_PROFILE_ALL_BRANCHES #define BRANCH_PROFILE() VMLINUX_SYMBOL(__start_branch_profile) = .; \ *(_ftrace_branch) \ VMLINUX_SYMBOL(__stop_branch_profile) = .; #else #define BRANCH_PROFILE() #endif |
5f77a88b3 tracing/infrastru... |
119 |
#ifdef CONFIG_EVENT_TRACING |
e4a9ea5ee tracing: Replace ... |
120 121 |
#define FTRACE_EVENTS() . = ALIGN(8); \ VMLINUX_SYMBOL(__start_ftrace_events) = .; \ |
b77e38aa2 tracing: add even... |
122 123 124 125 126 |
*(_ftrace_events) \ VMLINUX_SYMBOL(__stop_ftrace_events) = .; #else #define FTRACE_EVENTS() #endif |
1ba28e02a tracing: add trac... |
127 128 129 130 131 132 133 |
#ifdef CONFIG_TRACING #define TRACE_PRINTKS() VMLINUX_SYMBOL(__start___trace_bprintk_fmt) = .; \ *(__trace_printk_fmt) /* Trace_printk fmt' pointer */ \ VMLINUX_SYMBOL(__stop___trace_bprintk_fmt) = .; #else #define TRACE_PRINTKS() #endif |
bed1ffca0 tracing/syscalls:... |
134 |
#ifdef CONFIG_FTRACE_SYSCALLS |
3d56e331b tracing: Replace ... |
135 136 |
#define TRACE_SYSCALLS() . = ALIGN(8); \ VMLINUX_SYMBOL(__start_syscalls_metadata) = .; \ |
bed1ffca0 tracing/syscalls:... |
137 138 139 140 141 |
*(__syscalls_metadata) \ VMLINUX_SYMBOL(__stop_syscalls_metadata) = .; #else #define TRACE_SYSCALLS() #endif |
aab94339c of: Add support f... |
142 143 144 145 146 147 |
#define KERNEL_DTB() \ STRUCT_ALIGN(); \ VMLINUX_SYMBOL(__dtb_start) = .; \ *(.dtb.init.rodata) \ VMLINUX_SYMBOL(__dtb_end) = .; |
ca967258b all-archs: consol... |
148 149 |
/* .data section */ #define DATA_DATA \ |
0e0d314e6 kbuild: introduce... |
150 |
*(.data) \ |
312b1485f Introduce new sec... |
151 |
*(.ref.data) \ |
d356c0b68 vmlinux.lds.h: ga... |
152 |
*(.data..shared_aligned) /* percpu related */ \ |
eb8f68904 Use separate sect... |
153 154 155 156 157 158 |
DEV_KEEP(init.data) \ DEV_KEEP(exit.data) \ CPU_KEEP(init.data) \ CPU_KEEP(exit.data) \ MEM_KEEP(init.data) \ MEM_KEEP(exit.data) \ |
654986462 tracepoints: Fix ... |
159 |
STRUCT_ALIGN(); \ |
97e1c18e8 tracing: Kernel T... |
160 |
*(__tracepoints) \ |
e9d376f0f dynamic debug: co... |
161 |
/* implement dynamic printk debug */ \ |
d430d3d7e jump label: Intro... |
162 163 164 165 |
. = ALIGN(8); \ VMLINUX_SYMBOL(__start___jump_table) = .; \ *(__jump_table) \ VMLINUX_SYMBOL(__stop___jump_table) = .; \ |
e9d376f0f dynamic debug: co... |
166 167 168 169 |
. = ALIGN(8); \ VMLINUX_SYMBOL(__start___verbose) = .; \ *(__verbose) \ VMLINUX_SYMBOL(__stop___verbose) = .; \ |
2bcd521a6 trace: profile al... |
170 |
LIKELY_PROFILE() \ |
b77e38aa2 tracing: add even... |
171 |
BRANCH_PROFILE() \ |
3d56e331b tracing: Replace ... |
172 |
TRACE_PRINTKS() |
ca967258b all-archs: consol... |
173 |
|
ef53dae86 Improve vmlinux.l... |
174 175 176 177 178 179 |
/* * Data section helpers */ #define NOSAVE_DATA \ . = ALIGN(PAGE_SIZE); \ VMLINUX_SYMBOL(__nosave_begin) = .; \ |
07b3bb1ef Rename .data.nosa... |
180 |
*(.data..nosave) \ |
ef53dae86 Improve vmlinux.l... |
181 182 183 184 185 |
. = ALIGN(PAGE_SIZE); \ VMLINUX_SYMBOL(__nosave_end) = .; #define PAGE_ALIGNED_DATA(page_align) \ . = ALIGN(page_align); \ |
75b134837 Rename .data.page... |
186 |
*(.data..page_aligned) |
ef53dae86 Improve vmlinux.l... |
187 188 189 |
#define READ_MOSTLY_DATA(align) \ . = ALIGN(align); \ |
8369744fc include/asm-gener... |
190 191 |
*(.data..read_mostly) \ . = ALIGN(align); |
ef53dae86 Improve vmlinux.l... |
192 193 194 |
#define CACHELINE_ALIGNED_DATA(align) \ . = ALIGN(align); \ |
4af57b787 Rename .data.cach... |
195 |
*(.data..cacheline_aligned) |
ef53dae86 Improve vmlinux.l... |
196 |
|
39a449d96 asm-generic/vmlin... |
197 |
#define INIT_TASK_DATA(align) \ |
ef53dae86 Improve vmlinux.l... |
198 |
. = ALIGN(align); \ |
2af7687f1 Rename .data.init... |
199 |
*(.data..init_task) |
ef53dae86 Improve vmlinux.l... |
200 201 202 203 204 |
/* * Read only Data */ #define RO_DATA_SECTION(align) \ |
4096b46f0 sparc64: fix alig... |
205 |
. = ALIGN((align)); \ |
1da177e4c Linux-2.6.12-rc2 |
206 |
.rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \ |
6569580de [PATCH] i386: Dis... |
207 |
VMLINUX_SYMBOL(__start_rodata) = .; \ |
1da177e4c Linux-2.6.12-rc2 |
208 209 |
*(.rodata) *(.rodata.*) \ *(__vermagic) /* Kernel version magic */ \ |
654986462 tracepoints: Fix ... |
210 211 212 213 |
. = ALIGN(8); \ VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .; \ *(__tracepoints_ptrs) /* Tracepoints: pointer array */\ VMLINUX_SYMBOL(__stop___tracepoints_ptrs) = .; \ |
97e1c18e8 tracing: Kernel T... |
214 |
*(__tracepoints_strings)/* Tracepoints: strings */ \ |
1da177e4c Linux-2.6.12-rc2 |
215 216 217 218 219 220 |
} \ \ .rodata1 : AT(ADDR(.rodata1) - LOAD_OFFSET) { \ *(.rodata1) \ } \ \ |
6360b1fbb move BUG_TABLE in... |
221 222 |
BUG_TABLE \ \ |
1da177e4c Linux-2.6.12-rc2 |
223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
/* PCI quirks */ \ .pci_fixup : AT(ADDR(.pci_fixup) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start_pci_fixups_early) = .; \ *(.pci_fixup_early) \ VMLINUX_SYMBOL(__end_pci_fixups_early) = .; \ VMLINUX_SYMBOL(__start_pci_fixups_header) = .; \ *(.pci_fixup_header) \ VMLINUX_SYMBOL(__end_pci_fixups_header) = .; \ VMLINUX_SYMBOL(__start_pci_fixups_final) = .; \ *(.pci_fixup_final) \ VMLINUX_SYMBOL(__end_pci_fixups_final) = .; \ VMLINUX_SYMBOL(__start_pci_fixups_enable) = .; \ *(.pci_fixup_enable) \ VMLINUX_SYMBOL(__end_pci_fixups_enable) = .; \ |
1597cacbe PCI: Fix multiple... |
237 238 239 |
VMLINUX_SYMBOL(__start_pci_fixups_resume) = .; \ *(.pci_fixup_resume) \ VMLINUX_SYMBOL(__end_pci_fixups_resume) = .; \ |
e1a2a51e6 Suspend/Resume bu... |
240 241 242 243 244 245 |
VMLINUX_SYMBOL(__start_pci_fixups_resume_early) = .; \ *(.pci_fixup_resume_early) \ VMLINUX_SYMBOL(__end_pci_fixups_resume_early) = .; \ VMLINUX_SYMBOL(__start_pci_fixups_suspend) = .; \ *(.pci_fixup_suspend) \ VMLINUX_SYMBOL(__end_pci_fixups_suspend) = .; \ |
1da177e4c Linux-2.6.12-rc2 |
246 247 |
} \ \ |
5658c7694 firmware: allow f... |
248 249 250 251 252 253 254 |
/* Built-in firmware blobs */ \ .builtin_fw : AT(ADDR(.builtin_fw) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start_builtin_fw) = .; \ *(.builtin_fw) \ VMLINUX_SYMBOL(__end_builtin_fw) = .; \ } \ \ |
394b701ce [PATCH] RapidIO s... |
255 |
/* RapidIO route ops */ \ |
e5cabeb3d rapidio: add Port... |
256 |
.rio_ops : AT(ADDR(.rio_ops) - LOAD_OFFSET) { \ |
058f88d67 rapidio: modify i... |
257 258 259 |
VMLINUX_SYMBOL(__start_rio_switch_ops) = .; \ *(.rio_switch_ops) \ VMLINUX_SYMBOL(__end_rio_switch_ops) = .; \ |
394b701ce [PATCH] RapidIO s... |
260 261 |
} \ \ |
63687a528 x86: move traceda... |
262 263 |
TRACEDATA \ \ |
1da177e4c Linux-2.6.12-rc2 |
264 265 266 |
/* Kernel symbol table: Normal symbols */ \ __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___ksymtab) = .; \ |
f02e8a659 module: Sort expo... |
267 |
*(SORT(___ksymtab+*)) \ |
1da177e4c Linux-2.6.12-rc2 |
268 269 270 271 272 273 |
VMLINUX_SYMBOL(__stop___ksymtab) = .; \ } \ \ /* Kernel symbol table: GPL-only symbols */ \ __ksymtab_gpl : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___ksymtab_gpl) = .; \ |
f02e8a659 module: Sort expo... |
274 |
*(SORT(___ksymtab_gpl+*)) \ |
1da177e4c Linux-2.6.12-rc2 |
275 276 277 |
VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \ } \ \ |
f71d20e96 [PATCH] Add EXPOR... |
278 279 280 |
/* Kernel symbol table: Normal unused symbols */ \ __ksymtab_unused : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___ksymtab_unused) = .; \ |
f02e8a659 module: Sort expo... |
281 |
*(SORT(___ksymtab_unused+*)) \ |
f71d20e96 [PATCH] Add EXPOR... |
282 283 284 285 286 287 |
VMLINUX_SYMBOL(__stop___ksymtab_unused) = .; \ } \ \ /* Kernel symbol table: GPL-only unused symbols */ \ __ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .; \ |
f02e8a659 module: Sort expo... |
288 |
*(SORT(___ksymtab_unused_gpl+*)) \ |
f71d20e96 [PATCH] Add EXPOR... |
289 290 291 |
VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .; \ } \ \ |
9f28bb7e1 [PATCH] add EXPOR... |
292 293 294 |
/* Kernel symbol table: GPL-future-only symbols */ \ __ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .; \ |
f02e8a659 module: Sort expo... |
295 |
*(SORT(___ksymtab_gpl_future+*)) \ |
9f28bb7e1 [PATCH] add EXPOR... |
296 297 298 |
VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .; \ } \ \ |
1da177e4c Linux-2.6.12-rc2 |
299 300 301 |
/* Kernel symbol table: Normal symbols */ \ __kcrctab : AT(ADDR(__kcrctab) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___kcrctab) = .; \ |
f02e8a659 module: Sort expo... |
302 |
*(SORT(___kcrctab+*)) \ |
1da177e4c Linux-2.6.12-rc2 |
303 304 305 306 307 308 |
VMLINUX_SYMBOL(__stop___kcrctab) = .; \ } \ \ /* Kernel symbol table: GPL-only symbols */ \ __kcrctab_gpl : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___kcrctab_gpl) = .; \ |
f02e8a659 module: Sort expo... |
309 |
*(SORT(___kcrctab_gpl+*)) \ |
1da177e4c Linux-2.6.12-rc2 |
310 311 312 |
VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .; \ } \ \ |
f71d20e96 [PATCH] Add EXPOR... |
313 314 315 |
/* Kernel symbol table: Normal unused symbols */ \ __kcrctab_unused : AT(ADDR(__kcrctab_unused) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___kcrctab_unused) = .; \ |
f02e8a659 module: Sort expo... |
316 |
*(SORT(___kcrctab_unused+*)) \ |
f71d20e96 [PATCH] Add EXPOR... |
317 318 319 320 321 322 |
VMLINUX_SYMBOL(__stop___kcrctab_unused) = .; \ } \ \ /* Kernel symbol table: GPL-only unused symbols */ \ __kcrctab_unused_gpl : AT(ADDR(__kcrctab_unused_gpl) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___kcrctab_unused_gpl) = .; \ |
f02e8a659 module: Sort expo... |
323 |
*(SORT(___kcrctab_unused_gpl+*)) \ |
f71d20e96 [PATCH] Add EXPOR... |
324 325 326 |
VMLINUX_SYMBOL(__stop___kcrctab_unused_gpl) = .; \ } \ \ |
9f28bb7e1 [PATCH] add EXPOR... |
327 328 329 |
/* Kernel symbol table: GPL-future-only symbols */ \ __kcrctab_gpl_future : AT(ADDR(__kcrctab_gpl_future) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___kcrctab_gpl_future) = .; \ |
f02e8a659 module: Sort expo... |
330 |
*(SORT(___kcrctab_gpl_future+*)) \ |
9f28bb7e1 [PATCH] add EXPOR... |
331 332 333 |
VMLINUX_SYMBOL(__stop___kcrctab_gpl_future) = .; \ } \ \ |
1da177e4c Linux-2.6.12-rc2 |
334 335 336 337 338 |
/* Kernel symbol table: strings */ \ __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \ *(__ksymtab_strings) \ } \ \ |
eb8f68904 Use separate sect... |
339 340 |
/* __*init sections */ \ __init_rodata : AT(ADDR(__init_rodata) - LOAD_OFFSET) { \ |
312b1485f Introduce new sec... |
341 |
*(.ref.rodata) \ |
eb8f68904 Use separate sect... |
342 343 344 345 346 347 348 349 |
DEV_KEEP(init.rodata) \ DEV_KEEP(exit.rodata) \ CPU_KEEP(init.rodata) \ CPU_KEEP(exit.rodata) \ MEM_KEEP(init.rodata) \ MEM_KEEP(exit.rodata) \ } \ \ |
1da177e4c Linux-2.6.12-rc2 |
350 351 352 353 354 |
/* Built-in module parameters. */ \ __param : AT(ADDR(__param) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___param) = .; \ *(__param) \ VMLINUX_SYMBOL(__stop___param) = .; \ |
e94965ed5 module: show vers... |
355 356 357 358 359 360 361 |
} \ \ /* Built-in module versions. */ \ __modver : AT(ADDR(__modver) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___modver) = .; \ *(__modver) \ VMLINUX_SYMBOL(__stop___modver) = .; \ |
edeed3058 x86: add testcase... |
362 |
. = ALIGN((align)); \ |
6569580de [PATCH] i386: Dis... |
363 |
VMLINUX_SYMBOL(__end_rodata) = .; \ |
7583ddfd3 [PATCH] Include _... |
364 |
} \ |
4096b46f0 sparc64: fix alig... |
365 |
. = ALIGN((align)); |
ef53dae86 Improve vmlinux.l... |
366 |
/* RODATA & RO_DATA provided for backward compatibility. |
4096b46f0 sparc64: fix alig... |
367 |
* All archs are supposed to use RO_DATA() */ |
ef53dae86 Improve vmlinux.l... |
368 369 |
#define RODATA RO_DATA_SECTION(4096) #define RO_DATA(align) RO_DATA_SECTION(align) |
1da177e4c Linux-2.6.12-rc2 |
370 371 |
#define SECURITY_INIT \ |
60bad7fad [PATCH] kexec: vm... |
372 |
.security_initcall.init : AT(ADDR(.security_initcall.init) - LOAD_OFFSET) { \ |
1da177e4c Linux-2.6.12-rc2 |
373 374 375 376 |
VMLINUX_SYMBOL(__security_initcall_start) = .; \ *(.security_initcall.init) \ VMLINUX_SYMBOL(__security_initcall_end) = .; \ } |
7664709b4 all-archs: consol... |
377 378 379 380 |
/* .text section. Map to function alignment to avoid address changes * during second ld run in second ld pass when generating System.map */ #define TEXT_TEXT \ ALIGN_FUNCTION(); \ |
fb5e2b379 vmlinux.lds: move... |
381 |
*(.text.hot) \ |
0e0d314e6 kbuild: introduce... |
382 |
*(.text) \ |
312b1485f Introduce new sec... |
383 |
*(.ref.text) \ |
eb8f68904 Use separate sect... |
384 385 386 387 388 |
DEV_KEEP(init.text) \ DEV_KEEP(exit.text) \ CPU_KEEP(init.text) \ CPU_KEEP(exit.text) \ MEM_KEEP(init.text) \ |
fb5e2b379 vmlinux.lds: move... |
389 390 |
MEM_KEEP(exit.text) \ *(.text.unlikely) |
eb8f68904 Use separate sect... |
391 |
|
7664709b4 all-archs: consol... |
392 |
|
6d30e3a89 kbuild: Avoid inc... |
393 394 |
/* sched.text is aling to function alignment to secure we have same * address even at second ld pass when generating System.map */ |
1da177e4c Linux-2.6.12-rc2 |
395 |
#define SCHED_TEXT \ |
6d30e3a89 kbuild: Avoid inc... |
396 |
ALIGN_FUNCTION(); \ |
1da177e4c Linux-2.6.12-rc2 |
397 398 399 |
VMLINUX_SYMBOL(__sched_text_start) = .; \ *(.sched.text) \ VMLINUX_SYMBOL(__sched_text_end) = .; |
6d30e3a89 kbuild: Avoid inc... |
400 401 |
/* spinlock.text is aling to function alignment to secure we have same * address even at second ld pass when generating System.map */ |
1da177e4c Linux-2.6.12-rc2 |
402 |
#define LOCK_TEXT \ |
6d30e3a89 kbuild: Avoid inc... |
403 |
ALIGN_FUNCTION(); \ |
1da177e4c Linux-2.6.12-rc2 |
404 405 406 |
VMLINUX_SYMBOL(__lock_text_start) = .; \ *(.spinlock.text) \ VMLINUX_SYMBOL(__lock_text_end) = .; |
d0aaff979 [PATCH] Kprobes: ... |
407 408 409 410 411 412 |
#define KPROBES_TEXT \ ALIGN_FUNCTION(); \ VMLINUX_SYMBOL(__kprobes_text_start) = .; \ *(.kprobes.text) \ VMLINUX_SYMBOL(__kprobes_text_end) = .; |
a7d0c2103 [PATCH] i386 / um... |
413 |
|
ea7145477 x86: Separate out... |
414 415 416 417 418 |
#define ENTRY_TEXT \ ALIGN_FUNCTION(); \ VMLINUX_SYMBOL(__entry_text_start) = .; \ *(.entry.text) \ VMLINUX_SYMBOL(__entry_text_end) = .; |
a0343e823 tracing/function-... |
419 420 421 422 423 424 425 426 427 |
#ifdef CONFIG_FUNCTION_GRAPH_TRACER #define IRQENTRY_TEXT \ ALIGN_FUNCTION(); \ VMLINUX_SYMBOL(__irqentry_text_start) = .; \ *(.irqentry.text) \ VMLINUX_SYMBOL(__irqentry_text_end) = .; #else #define IRQENTRY_TEXT #endif |
37c514e3d Add missing init ... |
428 |
/* Section used for early init (in .S files) */ |
7923f90ff vmlinux.lds.h update |
429 |
#define HEAD_TEXT *(.head.text) |
37c514e3d Add missing init ... |
430 |
|
7923f90ff vmlinux.lds.h update |
431 |
#define HEAD_TEXT_SECTION \ |
ef53dae86 Improve vmlinux.l... |
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 |
.head.text : AT(ADDR(.head.text) - LOAD_OFFSET) { \ HEAD_TEXT \ } /* * Exception table */ #define EXCEPTION_TABLE(align) \ . = ALIGN(align); \ __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start___ex_table) = .; \ *(__ex_table) \ VMLINUX_SYMBOL(__stop___ex_table) = .; \ } /* * Init task */ |
39a449d96 asm-generic/vmlin... |
450 |
#define INIT_TASK_DATA_SECTION(align) \ |
ef53dae86 Improve vmlinux.l... |
451 |
. = ALIGN(align); \ |
da5e37efe vmlinux.lds: fix ... |
452 |
.data..init_task : AT(ADDR(.data..init_task) - LOAD_OFFSET) { \ |
39a449d96 asm-generic/vmlin... |
453 |
INIT_TASK_DATA(align) \ |
ef53dae86 Improve vmlinux.l... |
454 |
} |
37c514e3d Add missing init ... |
455 |
|
b99b87f70 kernel: construct... |
456 |
#ifdef CONFIG_CONSTRUCTORS |
2a2325e6e gcov: fix __ctors... |
457 458 |
#define KERNEL_CTORS() . = ALIGN(8); \ VMLINUX_SYMBOL(__ctors_start) = .; \ |
b99b87f70 kernel: construct... |
459 460 461 462 463 |
*(.ctors) \ VMLINUX_SYMBOL(__ctors_end) = .; #else #define KERNEL_CTORS() #endif |
01ba2bdc6 all archs: consol... |
464 |
/* init and exit section handling */ |
eb8f68904 Use separate sect... |
465 466 467 |
#define INIT_DATA \ *(.init.data) \ DEV_DISCARD(init.data) \ |
eb8f68904 Use separate sect... |
468 |
CPU_DISCARD(init.data) \ |
eb8f68904 Use separate sect... |
469 |
MEM_DISCARD(init.data) \ |
b99b87f70 kernel: construct... |
470 |
KERNEL_CTORS() \ |
fd6c3a8dc initconst adjustm... |
471 |
*(.init.rodata) \ |
4b3b4c5e6 ftrace: __start_m... |
472 |
MCOUNT_REC() \ |
e4a9ea5ee tracing: Replace ... |
473 |
FTRACE_EVENTS() \ |
3d56e331b tracing: Replace ... |
474 |
TRACE_SYSCALLS() \ |
fd6c3a8dc initconst adjustm... |
475 476 |
DEV_DISCARD(init.rodata) \ CPU_DISCARD(init.rodata) \ |
aab94339c of: Add support f... |
477 478 |
MEM_DISCARD(init.rodata) \ KERNEL_DTB() |
eb8f68904 Use separate sect... |
479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 |
#define INIT_TEXT \ *(.init.text) \ DEV_DISCARD(init.text) \ CPU_DISCARD(init.text) \ MEM_DISCARD(init.text) #define EXIT_DATA \ *(.exit.data) \ DEV_DISCARD(exit.data) \ DEV_DISCARD(exit.rodata) \ CPU_DISCARD(exit.data) \ CPU_DISCARD(exit.rodata) \ MEM_DISCARD(exit.data) \ MEM_DISCARD(exit.rodata) |
01ba2bdc6 all archs: consol... |
494 |
|
eb8f68904 Use separate sect... |
495 496 497 498 499 |
#define EXIT_TEXT \ *(.exit.text) \ DEV_DISCARD(exit.text) \ CPU_DISCARD(exit.text) \ MEM_DISCARD(exit.text) |
01ba2bdc6 all archs: consol... |
500 |
|
7923f90ff vmlinux.lds.h update |
501 502 |
#define EXIT_CALL \ *(.exitcall.exit) |
ef53dae86 Improve vmlinux.l... |
503 504 505 506 |
/* * bss (Block Started by Symbol) - uninitialized data * zeroed during startup */ |
04e448d9a vmlinux.lds.h: re... |
507 508 |
#define SBSS(sbss_align) \ . = ALIGN(sbss_align); \ |
ef53dae86 Improve vmlinux.l... |
509 510 511 512 513 514 515 516 |
.sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { \ *(.sbss) \ *(.scommon) \ } #define BSS(bss_align) \ . = ALIGN(bss_align); \ .bss : AT(ADDR(.bss) - LOAD_OFFSET) { \ |
7c74df07f Rename .bss.page_... |
517 |
*(.bss..page_aligned) \ |
ef53dae86 Improve vmlinux.l... |
518 519 520 |
*(.dynbss) \ *(.bss) \ *(COMMON) \ |
ef53dae86 Improve vmlinux.l... |
521 522 523 524 525 526 527 |
} /* * DWARF debug sections. * Symbols in the DWARF debugging sections are relative to * the beginning of the section so we begin them at 0. */ |
a7d0c2103 [PATCH] i386 / um... |
528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 |
#define DWARF_DEBUG \ /* DWARF 1 */ \ .debug 0 : { *(.debug) } \ .line 0 : { *(.line) } \ /* GNU DWARF 1 extensions */ \ .debug_srcinfo 0 : { *(.debug_srcinfo) } \ .debug_sfnames 0 : { *(.debug_sfnames) } \ /* DWARF 1.1 and DWARF 2 */ \ .debug_aranges 0 : { *(.debug_aranges) } \ .debug_pubnames 0 : { *(.debug_pubnames) } \ /* DWARF 2 */ \ .debug_info 0 : { *(.debug_info \ .gnu.linkonce.wi.*) } \ .debug_abbrev 0 : { *(.debug_abbrev) } \ .debug_line 0 : { *(.debug_line) } \ .debug_frame 0 : { *(.debug_frame) } \ .debug_str 0 : { *(.debug_str) } \ .debug_loc 0 : { *(.debug_loc) } \ .debug_macinfo 0 : { *(.debug_macinfo) } \ /* SGI/MIPS DWARF 2 extensions */ \ .debug_weaknames 0 : { *(.debug_weaknames) } \ .debug_funcnames 0 : { *(.debug_funcnames) } \ .debug_typenames 0 : { *(.debug_typenames) } \ .debug_varnames 0 : { *(.debug_varnames) } \ /* Stabs debugging sections. */ #define STABS_DEBUG \ .stab 0 : { *(.stab) } \ .stabstr 0 : { *(.stabstr) } \ .stab.excl 0 : { *(.stab.excl) } \ .stab.exclstr 0 : { *(.stab.exclstr) } \ .stab.index 0 : { *(.stab.index) } \ .stab.indexstr 0 : { *(.stab.indexstr) } \ .comment 0 : { *(.comment) } |
9c9b8b388 [PATCH] x86: put ... |
562 |
|
6360b1fbb move BUG_TABLE in... |
563 |
#ifdef CONFIG_GENERIC_BUG |
7664c5a1d [PATCH] Generic B... |
564 565 566 |
#define BUG_TABLE \ . = ALIGN(8); \ __bug_table : AT(ADDR(__bug_table) - LOAD_OFFSET) { \ |
c6de00261 Missing symbol pr... |
567 |
VMLINUX_SYMBOL(__start___bug_table) = .; \ |
7664c5a1d [PATCH] Generic B... |
568 |
*(__bug_table) \ |
c6de00261 Missing symbol pr... |
569 |
VMLINUX_SYMBOL(__stop___bug_table) = .; \ |
7664c5a1d [PATCH] Generic B... |
570 |
} |
6360b1fbb move BUG_TABLE in... |
571 572 573 |
#else #define BUG_TABLE #endif |
7664c5a1d [PATCH] Generic B... |
574 |
|
63687a528 x86: move traceda... |
575 576 577 578 |
#ifdef CONFIG_PM_TRACE #define TRACEDATA \ . = ALIGN(4); \ .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) { \ |
c6de00261 Missing symbol pr... |
579 |
VMLINUX_SYMBOL(__tracedata_start) = .; \ |
63687a528 x86: move traceda... |
580 |
*(.tracedata) \ |
c6de00261 Missing symbol pr... |
581 |
VMLINUX_SYMBOL(__tracedata_end) = .; \ |
63687a528 x86: move traceda... |
582 583 584 585 |
} #else #define TRACEDATA #endif |
9c9b8b388 [PATCH] x86: put ... |
586 |
#define NOTES \ |
cbe87121f i386: Put allocat... |
587 588 589 590 591 |
.notes : AT(ADDR(.notes) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(__start_notes) = .; \ *(.note.*) \ VMLINUX_SYMBOL(__stop_notes) = .; \ } |
61ce1efe6 [PATCH] vmlinux.l... |
592 |
|
ef53dae86 Improve vmlinux.l... |
593 594 595 596 597 |
#define INIT_SETUP(initsetup_align) \ . = ALIGN(initsetup_align); \ VMLINUX_SYMBOL(__setup_start) = .; \ *(.init.setup) \ VMLINUX_SYMBOL(__setup_end) = .; |
61ce1efe6 [PATCH] vmlinux.l... |
598 |
#define INITCALLS \ |
c2147a509 Better interface ... |
599 |
*(.initcallearly.init) \ |
c6de00261 Missing symbol pr... |
600 |
VMLINUX_SYMBOL(__early_initcall_end) = .; \ |
b3438f826 Add "pure_initcal... |
601 602 |
*(.initcall0.init) \ *(.initcall0s.init) \ |
61ce1efe6 [PATCH] vmlinux.l... |
603 |
*(.initcall1.init) \ |
735a7ffb7 [PATCH] drivers: ... |
604 |
*(.initcall1s.init) \ |
61ce1efe6 [PATCH] vmlinux.l... |
605 |
*(.initcall2.init) \ |
735a7ffb7 [PATCH] drivers: ... |
606 |
*(.initcall2s.init) \ |
61ce1efe6 [PATCH] vmlinux.l... |
607 |
*(.initcall3.init) \ |
735a7ffb7 [PATCH] drivers: ... |
608 |
*(.initcall3s.init) \ |
61ce1efe6 [PATCH] vmlinux.l... |
609 |
*(.initcall4.init) \ |
735a7ffb7 [PATCH] drivers: ... |
610 |
*(.initcall4s.init) \ |
61ce1efe6 [PATCH] vmlinux.l... |
611 |
*(.initcall5.init) \ |
735a7ffb7 [PATCH] drivers: ... |
612 |
*(.initcall5s.init) \ |
8d610dd52 Make sure we popu... |
613 |
*(.initcallrootfs.init) \ |
61ce1efe6 [PATCH] vmlinux.l... |
614 |
*(.initcall6.init) \ |
735a7ffb7 [PATCH] drivers: ... |
615 616 617 |
*(.initcall6s.init) \ *(.initcall7.init) \ *(.initcall7s.init) |
61ce1efe6 [PATCH] vmlinux.l... |
618 |
|
ef53dae86 Improve vmlinux.l... |
619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 |
#define INIT_CALLS \ VMLINUX_SYMBOL(__initcall_start) = .; \ INITCALLS \ VMLINUX_SYMBOL(__initcall_end) = .; #define CON_INITCALL \ VMLINUX_SYMBOL(__con_initcall_start) = .; \ *(.con_initcall.init) \ VMLINUX_SYMBOL(__con_initcall_end) = .; #define SECURITY_INITCALL \ VMLINUX_SYMBOL(__security_initcall_start) = .; \ *(.security_initcall.init) \ VMLINUX_SYMBOL(__security_initcall_end) = .; #ifdef CONFIG_BLK_DEV_INITRD #define INIT_RAM_FS \ |
d88262623 vmlinux.lds.h: lo... |
636 |
. = ALIGN(4); \ |
ef53dae86 Improve vmlinux.l... |
637 638 |
VMLINUX_SYMBOL(__initramfs_start) = .; \ *(.init.ramfs) \ |
ffe8018c3 initramfs: fix in... |
639 640 |
. = ALIGN(8); \ *(.init.ramfs.info) |
ef53dae86 Improve vmlinux.l... |
641 |
#else |
eadfe2198 LDSCRIPT: Name IN... |
642 |
#define INIT_RAM_FS |
ef53dae86 Improve vmlinux.l... |
643 |
#endif |
023bf6f1b linker script: un... |
644 645 646 647 648 649 650 651 652 |
/* * Default discarded sections. * * Some archs want to discard exit text/data at runtime rather than * link time due to cross-section references such as alt instructions, * bug table, eh_frame, etc. DISCARDS must be the last of output * section definitions so that such archs put those in earlier section * definitions. */ |
405d967dc linker script: th... |
653 654 655 656 |
#define DISCARDS \ /DISCARD/ : { \ EXIT_TEXT \ EXIT_DATA \ |
023bf6f1b linker script: un... |
657 |
EXIT_CALL \ |
405d967dc linker script: th... |
658 |
*(.discard) \ |
c7f52cdc2 support multiple ... |
659 |
*(.discard.*) \ |
405d967dc linker script: th... |
660 |
} |
3e5d8f978 x86: make percpu ... |
661 |
/** |
6ea0c34da percpu: Unify inp... |
662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 |
* PERCPU_INPUT - the percpu input sections * @cacheline: cacheline size * * The core percpu section names and core symbols which do not rely * directly upon load addresses. * * @cacheline is used to align subsections to avoid false cacheline * sharing between subsections for different purposes. */ #define PERCPU_INPUT(cacheline) \ VMLINUX_SYMBOL(__per_cpu_start) = .; \ *(.data..percpu..first) \ . = ALIGN(PAGE_SIZE); \ *(.data..percpu..page_aligned) \ . = ALIGN(cacheline); \ *(.data..percpu..readmostly) \ . = ALIGN(cacheline); \ *(.data..percpu) \ *(.data..percpu..shared_aligned) \ VMLINUX_SYMBOL(__per_cpu_end) = .; /** |
6b7c38d55 linker script: ki... |
684 |
* PERCPU_VADDR - define output section for percpu area |
19df0c2fe percpu: align per... |
685 |
* @cacheline: cacheline size |
3e5d8f978 x86: make percpu ... |
686 687 688 |
* @vaddr: explicit base address (optional) * @phdr: destination PHDR (optional) * |
19df0c2fe percpu: align per... |
689 690 691 692 693 694 695 696 |
* Macro which expands to output section for percpu area. * * @cacheline is used to align subsections to avoid false cacheline * sharing between subsections for different purposes. * * If @vaddr is not blank, it specifies explicit base address and all * percpu symbols will be offset from the given address. If blank, * @vaddr always equals @laddr + LOAD_OFFSET. |
3e5d8f978 x86: make percpu ... |
697 698 699 700 701 702 |
* * @phdr defines the output PHDR to use if not blank. Be warned that * output PHDR is sticky. If @phdr is specified, the next output * section in the linker script will go there too. @phdr should have * a leading colon. * |
3ac6cffea linker script: us... |
703 704 |
* Note that this macros defines __per_cpu_load as an absolute symbol. * If there is no need to put the percpu section at a predetermined |
0415b00d1 percpu: Always al... |
705 |
* address, use PERCPU_SECTION. |
3e5d8f978 x86: make percpu ... |
706 |
*/ |
19df0c2fe percpu: align per... |
707 |
#define PERCPU_VADDR(cacheline, vaddr, phdr) \ |
dba3d36b2 Revert "generic, ... |
708 |
VMLINUX_SYMBOL(__per_cpu_load) = .; \ |
3d9a854c2 Rename .data[.per... |
709 |
.data..percpu vaddr : AT(VMLINUX_SYMBOL(__per_cpu_load) \ |
6b7c38d55 linker script: ki... |
710 |
- LOAD_OFFSET) { \ |
6ea0c34da percpu: Unify inp... |
711 |
PERCPU_INPUT(cacheline) \ |
6b7c38d55 linker script: ki... |
712 |
} phdr \ |
3d9a854c2 Rename .data[.per... |
713 |
. = VMLINUX_SYMBOL(__per_cpu_load) + SIZEOF(.data..percpu); |
3e5d8f978 x86: make percpu ... |
714 715 |
/** |
0415b00d1 percpu: Always al... |
716 |
* PERCPU_SECTION - define output section for percpu area, simple version |
19df0c2fe percpu: align per... |
717 |
* @cacheline: cacheline size |
3e5d8f978 x86: make percpu ... |
718 |
* |
0415b00d1 percpu: Always al... |
719 720 |
* Align to PAGE_SIZE and outputs output section for percpu area. This * macro doesn't manipulate @vaddr or @phdr and __per_cpu_load and |
3e5d8f978 x86: make percpu ... |
721 |
* __per_cpu_start will be identical. |
3ac6cffea linker script: us... |
722 |
* |
0415b00d1 percpu: Always al... |
723 |
* This macro is equivalent to ALIGN(PAGE_SIZE); PERCPU_VADDR(@cacheline,,) |
19df0c2fe percpu: align per... |
724 725 |
* except that __per_cpu_load is defined as a relative symbol against * .data..percpu which is required for relocatable x86_32 configuration. |
3e5d8f978 x86: make percpu ... |
726 |
*/ |
0415b00d1 percpu: Always al... |
727 728 |
#define PERCPU_SECTION(cacheline) \ . = ALIGN(PAGE_SIZE); \ |
3d9a854c2 Rename .data[.per... |
729 |
.data..percpu : AT(ADDR(.data..percpu) - LOAD_OFFSET) { \ |
3ac6cffea linker script: us... |
730 |
VMLINUX_SYMBOL(__per_cpu_load) = .; \ |
6ea0c34da percpu: Unify inp... |
731 |
PERCPU_INPUT(cacheline) \ |
3ac6cffea linker script: us... |
732 |
} |
ef53dae86 Improve vmlinux.l... |
733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 |
/* * Definition of the high level *_SECTION macros * They will fit only a subset of the architectures */ /* * Writeable data. * All sections are combined in a single .data section. * The sections following CONSTRUCTORS are arranged so their * typical alignment matches. * A cacheline is typical/always less than a PAGE_SIZE so * the sections that has this restriction (or similar) * is located before the ones requiring PAGE_SIZE alignment. * NOSAVE_DATA starts and ends with a PAGE_SIZE alignment which |
25985edce Fix common misspe... |
750 |
* matches the requirement of PAGE_ALIGNED_DATA. |
ef53dae86 Improve vmlinux.l... |
751 |
* |
7923f90ff vmlinux.lds.h update |
752 |
* use 0 as page_align if page_aligned data is not used */ |
73f1d9391 asm-generic/vmlin... |
753 |
#define RW_DATA_SECTION(cacheline, pagealigned, inittask) \ |
ef53dae86 Improve vmlinux.l... |
754 755 |
. = ALIGN(PAGE_SIZE); \ .data : AT(ADDR(.data) - LOAD_OFFSET) { \ |
39a449d96 asm-generic/vmlin... |
756 |
INIT_TASK_DATA(inittask) \ |
1b2086227 Optimize the orde... |
757 758 |
NOSAVE_DATA \ PAGE_ALIGNED_DATA(pagealigned) \ |
ef53dae86 Improve vmlinux.l... |
759 760 761 762 |
CACHELINE_ALIGNED_DATA(cacheline) \ READ_MOSTLY_DATA(cacheline) \ DATA_DATA \ CONSTRUCTORS \ |
ef53dae86 Improve vmlinux.l... |
763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 |
} #define INIT_TEXT_SECTION(inittext_align) \ . = ALIGN(inittext_align); \ .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) { \ VMLINUX_SYMBOL(_sinittext) = .; \ INIT_TEXT \ VMLINUX_SYMBOL(_einittext) = .; \ } #define INIT_DATA_SECTION(initsetup_align) \ .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { \ INIT_DATA \ INIT_SETUP(initsetup_align) \ INIT_CALLS \ CON_INITCALL \ SECURITY_INITCALL \ INIT_RAM_FS \ } |
04e448d9a vmlinux.lds.h: re... |
782 783 784 785 |
#define BSS_SECTION(sbss_align, bss_align, stop_align) \ . = ALIGN(sbss_align); \ VMLINUX_SYMBOL(__bss_start) = .; \ SBSS(sbss_align) \ |
ef53dae86 Improve vmlinux.l... |
786 |
BSS(bss_align) \ |
04e448d9a vmlinux.lds.h: re... |
787 788 |
. = ALIGN(stop_align); \ VMLINUX_SYMBOL(__bss_stop) = .; |