1#include <asm-generic/vmlinux.lds.h> 2#include <asm/page.h> 3 4OUTPUT_FORMAT(ELF_FORMAT) 5OUTPUT_ARCH(ELF_ARCH) 6ENTRY(_start) 7jiffies = jiffies_64; 8 9VERSION { 10 { 11 local: *; 12 }; 13} 14 15SECTIONS 16{ 17 PROVIDE (__executable_start = START); 18 . = START + SIZEOF_HEADERS; 19 .interp : { *(.interp) } 20 __binary_start = .; 21 . = ALIGN(4096); /* Init code and data */ 22 _text = .; 23 INIT_TEXT_SECTION(PAGE_SIZE) 24 25 . = ALIGN(PAGE_SIZE); 26 27 /* Read-only sections, merged into text segment: */ 28 .hash : { *(.hash) } 29 .gnu.hash : { *(.gnu.hash) } 30 .dynsym : { *(.dynsym) } 31 .dynstr : { *(.dynstr) } 32 .gnu.version : { *(.gnu.version) } 33 .gnu.version_d : { *(.gnu.version_d) } 34 .gnu.version_r : { *(.gnu.version_r) } 35 .rel.init : { *(.rel.init) } 36 .rela.init : { *(.rela.init) } 37 .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } 38 .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } 39 .rel.fini : { *(.rel.fini) } 40 .rela.fini : { *(.rela.fini) } 41 .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } 42 .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } 43 .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } 44 .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } 45 .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } 46 .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } 47 .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } 48 .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } 49 .rel.ctors : { *(.rel.ctors) } 50 .rela.ctors : { *(.rela.ctors) } 51 .rel.dtors : { *(.rel.dtors) } 52 .rela.dtors : { *(.rela.dtors) } 53 .rel.got : { *(.rel.got) } 54 .rela.got : { *(.rela.got) } 55 .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } 56 .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } 57 .rel.plt : { 58 *(.rel.plt) 59 PROVIDE_HIDDEN(__rel_iplt_start = .); 60 *(.rel.iplt) 61 PROVIDE_HIDDEN(__rel_iplt_end = .); 62 } 63 .rela.plt : { 64 *(.rela.plt) 65 PROVIDE_HIDDEN(__rela_iplt_start = .); 66 *(.rela.iplt) 67 PROVIDE_HIDDEN(__rela_iplt_end = .); 68 } 69 .init : { 70 KEEP (*(.init)) 71 } =0x90909090 72 .plt : { *(.plt) } 73 .text : { 74 _stext = .; 75 TEXT_TEXT 76 SCHED_TEXT 77 LOCK_TEXT 78 *(.fixup) 79 *(.stub .text.* .gnu.linkonce.t.*) 80 /* .gnu.warning sections are handled specially by elf32.em. */ 81 *(.gnu.warning) 82 83 . = ALIGN(PAGE_SIZE); 84 } =0x90909090 85 . = ALIGN(PAGE_SIZE); 86 .syscall_stub : { 87 __syscall_stub_start = .; 88 *(.__syscall_stub*) 89 __syscall_stub_end = .; 90 } 91 .fini : { 92 KEEP (*(.fini)) 93 } =0x90909090 94 95 .kstrtab : { *(.kstrtab) } 96 97 #include <asm/common.lds.S> 98 99 __init_begin = .; 100 init.data : { INIT_DATA } 101 __init_end = .; 102 103 /* Ensure the __preinit_array_start label is properly aligned. We 104 could instead move the label definition inside the section, but 105 the linker would then create the section even if it turns out to 106 be empty, which isn't pretty. */ 107 . = ALIGN(32 / 8); 108 .preinit_array : { *(.preinit_array) } 109 .init_array : { *(.init_array) } 110 .fini_array : { *(.fini_array) } 111 .data : { 112 INIT_TASK_DATA(KERNEL_STACK_SIZE) 113 . = ALIGN(KERNEL_STACK_SIZE); 114 *(.data..init_irqstack) 115 DATA_DATA 116 *(.data.* .gnu.linkonce.d.*) 117 SORT(CONSTRUCTORS) 118 } 119 .data1 : { *(.data1) } 120 .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } 121 .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } 122 .eh_frame : { KEEP (*(.eh_frame)) } 123 .gcc_except_table : { *(.gcc_except_table) } 124 .dynamic : { *(.dynamic) } 125 .ctors : { 126 /* gcc uses crtbegin.o to find the start of 127 the constructors, so we make sure it is 128 first. Because this is a wildcard, it 129 doesn't matter if the user does not 130 actually link against crtbegin.o; the 131 linker won't look for a file to match a 132 wildcard. The wildcard also means that it 133 doesn't matter which directory crtbegin.o 134 is in. */ 135 KEEP (*crtbegin.o(.ctors)) 136 /* We don't want to include the .ctor section from 137 from the crtend.o file until after the sorted ctors. 138 The .ctor section from the crtend file contains the 139 end of ctors marker and it must be last */ 140 KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors)) 141 KEEP (*(SORT(.ctors.*))) 142 KEEP (*(.ctors)) 143 } 144 .dtors : { 145 KEEP (*crtbegin.o(.dtors)) 146 KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors)) 147 KEEP (*(SORT(.dtors.*))) 148 KEEP (*(.dtors)) 149 } 150 .jcr : { KEEP (*(.jcr)) } 151 .got : { *(.got.plt) *(.got) } 152 _edata = .; 153 PROVIDE (edata = .); 154 .bss : { 155 __bss_start = .; 156 *(.dynbss) 157 *(.bss .bss.* .gnu.linkonce.b.*) 158 *(COMMON) 159 /* Align here to ensure that the .bss section occupies space up to 160 _end. Align after .bss to ensure correct alignment even if the 161 .bss section disappears because there are no input sections. */ 162 . = ALIGN(32 / 8); 163 . = ALIGN(32 / 8); 164 } 165 __bss_stop = .; 166 _end = .; 167 PROVIDE (end = .); 168 169 STABS_DEBUG 170 171 DWARF_DEBUG 172 173 DISCARDS 174} 175