dyn.lds.S revision 0b0bf7a3ccb6f0b38ead71980e79f875046047b7
11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm-generic/vmlinux.lds.h> 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsOUTPUT_FORMAT(ELF_FORMAT) 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsOUTPUT_ARCH(ELF_ARCH) 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsENTRY(_start) 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsjiffies = jiffies_64; 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsSECTIONS 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds PROVIDE (__executable_start = START); 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds . = START + SIZEOF_HEADERS; 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .interp : { *(.interp) } 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Used in arch/um/kernel/mem.c. Any memory between START and __binary_start 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * is remapped.*/ 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __binary_start = .; 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds . = ALIGN(4096); /* Init code and data */ 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds _stext = .; 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __init_begin = .; 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .init.text : { 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds _sinittext = .; 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(.init.text) 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds _einittext = .; 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds . = ALIGN(4096); 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Read-only sections, merged into text segment: */ 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .hash : { *(.hash) } 290b0bf7a3ccb6f0b38ead71980e79f875046047b7Roland McGrath .gnu.hash : { *(.gnu.hash) } 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .dynsym : { *(.dynsym) } 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .dynstr : { *(.dynstr) } 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .gnu.version : { *(.gnu.version) } 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .gnu.version_d : { *(.gnu.version_d) } 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .gnu.version_r : { *(.gnu.version_r) } 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.init : { *(.rel.init) } 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.init : { *(.rela.init) } 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.fini : { *(.rel.fini) } 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.fini : { *(.rela.fini) } 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.ctors : { *(.rel.ctors) } 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.ctors : { *(.rela.ctors) } 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.dtors : { *(.rel.dtors) } 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.dtors : { *(.rela.dtors) } 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.got : { *(.rel.got) } 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.got : { *(.rela.got) } 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rel.plt : { *(.rel.plt) } 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .rela.plt : { *(.rela.plt) } 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .init : { 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds KEEP (*(.init)) 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } =0x90909090 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .plt : { *(.plt) } 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .text : { 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(.text) 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds SCHED_TEXT 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds LOCK_TEXT 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(.fixup) 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(.stub .text.* .gnu.linkonce.t.*) 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* .gnu.warning sections are handled specially by elf32.em. */ 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(.gnu.warning) 71d67b569f5f620c0fb95d5212642746b7ba9d29e4Jeff Dike 72d67b569f5f620c0fb95d5212642746b7ba9d29e4Jeff Dike . = ALIGN(4096); 73d67b569f5f620c0fb95d5212642746b7ba9d29e4Jeff Dike __syscall_stub_start = .; 74d67b569f5f620c0fb95d5212642746b7ba9d29e4Jeff Dike *(.__syscall_stub*) 75d67b569f5f620c0fb95d5212642746b7ba9d29e4Jeff Dike __syscall_stub_end = .; 76d67b569f5f620c0fb95d5212642746b7ba9d29e4Jeff Dike . = ALIGN(4096); 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } =0x90909090 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .fini : { 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds KEEP (*(.fini)) 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } =0x90909090 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .kstrtab : { *(.kstrtab) } 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds #include "asm/common.lds.S" 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds init.data : { *(.init.data) } 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Ensure the __preinit_array_start label is properly aligned. We 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds could instead move the label definition inside the section, but 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds the linker would then create the section even if it turns out to 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds be empty, which isn't pretty. */ 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds . = ALIGN(32 / 8); 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .preinit_array : { *(.preinit_array) } 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .init_array : { *(.init_array) } 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .fini_array : { *(.fini_array) } 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .data : { 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds . = ALIGN(KERNEL_STACK_SIZE); /* init_task */ 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(.data.init_task) 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(.data .data.* .gnu.linkonce.d.*) 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds SORT(CONSTRUCTORS) 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .data1 : { *(.data1) } 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .eh_frame : { KEEP (*(.eh_frame)) } 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .gcc_except_table : { *(.gcc_except_table) } 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .dynamic : { *(.dynamic) } 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .ctors : { 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* gcc uses crtbegin.o to find the start of 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds the constructors, so we make sure it is 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds first. Because this is a wildcard, it 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds doesn't matter if the user does not 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds actually link against crtbegin.o; the 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds linker won't look for a file to match a 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds wildcard. The wildcard also means that it 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds doesn't matter which directory crtbegin.o 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds is in. */ 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds KEEP (*crtbegin.o(.ctors)) 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* We don't want to include the .ctor section from 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds from the crtend.o file until after the sorted ctors. 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds The .ctor section from the crtend file contains the 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds end of ctors marker and it must be last */ 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors)) 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds KEEP (*(SORT(.ctors.*))) 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds KEEP (*(.ctors)) 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .dtors : { 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds KEEP (*crtbegin.o(.dtors)) 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors)) 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds KEEP (*(SORT(.dtors.*))) 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds KEEP (*(.dtors)) 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .jcr : { KEEP (*(.jcr)) } 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .got : { *(.got.plt) *(.got) } 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds _edata = .; 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds PROVIDE (edata = .); 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __bss_start = .; 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .bss : { 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(.dynbss) 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(.bss .bss.* .gnu.linkonce.b.*) 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *(COMMON) 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Align here to ensure that the .bss section occupies space up to 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds _end. Align after .bss to ensure correct alignment even if the 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds .bss section disappears because there are no input sections. */ 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds . = ALIGN(32 / 8); 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds . = ALIGN(32 / 8); 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds _end = .; 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds PROVIDE (end = .); 150a7d0c210337246fa9c25b73cf76dfdbb159f642bPaolo 'Blaisorblade' Giarrusso 151a7d0c210337246fa9c25b73cf76dfdbb159f642bPaolo 'Blaisorblade' Giarrusso STABS_DEBUG 152a7d0c210337246fa9c25b73cf76dfdbb159f642bPaolo 'Blaisorblade' Giarrusso 153a7d0c210337246fa9c25b73cf76dfdbb159f642bPaolo 'Blaisorblade' Giarrusso DWARF_DEBUG 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 155