1OUTPUT_ARCH(aarch64) 2ENTRY(_start) 3 4SEARCH_DIR(/usr/lib); 5SECTIONS 6{ 7 /* Read-only sections, merged into text segment: */ 8 . = text_start; /* This is set using --defsym= on the command line. */ 9 .vmm_vectors : { *(.vmm_vectors) } 10 .text : 11 { 12 *(.text) 13 *(.stub) 14 /* .gnu.warning sections are handled specially by elf32.em. */ 15 *(.gnu.warning) 16 *(.gnu.linkonce.t*) 17 } =0x9090 18 .plt : 19 { 20 *(.plt) 21 *(.iplt) 22 } 23 24 /* 25 * Align to the the largest page size the kernel could be built for. 26 * If we don't then building page tables in locore.S could fail as it 27 * assumes the .text section is on a different page to later sections. 28 */ 29 . = ALIGN(CONSTANT(MAXPAGESIZE)); 30 _etext = .; 31 PROVIDE (etext = .); 32 33 .fini : { *(.fini) } =0x9090 34 .rodata : { *(.rodata*) *(.gnu.linkonce.r*) } 35 .rodata1 : { *(.rodata1) } 36 .interp : { *(.interp) } 37 .hash : { *(.hash) } 38 .dynsym : { *(.dynsym) } 39 .dynstr : { *(.dynstr) } 40 .gnu.version : { *(.gnu.version) } 41 .gnu.version_d : { *(.gnu.version_d) } 42 .gnu.version_r : { *(.gnu.version_r) } 43 .note.gnu.build-id : { 44 PROVIDE (__build_id_start = .); 45 *(.note.gnu.build-id) 46 PROVIDE (__build_id_end = .); 47 } 48 .rel.text : 49 { *(.rel.text) *(.rel.gnu.linkonce.t*) } 50 .rela.text : 51 { *(.rela.text) *(.rela.gnu.linkonce.t*) } 52 .rel.data : 53 { *(.rel.data) *(.rel.gnu.linkonce.d*) } 54 .rela.data : 55 { *(.rela.data) *(.rela.gnu.linkonce.d*) } 56 .rel.rodata : 57 { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } 58 .rela.rodata : 59 { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } 60 .rel.got : { *(.rel.got) } 61 .rela.got : { *(.rela.got) } 62 .rel.ctors : { *(.rel.ctors) } 63 .rela.ctors : { *(.rela.ctors) } 64 .rel.dtors : { *(.rel.dtors) } 65 .rela.dtors : { *(.rela.dtors) } 66 .rel.init : { *(.rel.init) } 67 .rela.init : { *(.rela.init) } 68 .rel.fini : { *(.rel.fini) } 69 .rela.fini : { *(.rela.fini) } 70 .rel.bss : { *(.rel.bss) } 71 .rela.bss : { *(.rela.bss) } 72 .rel.plt : { *(.rel.plt) } 73 .rela.plt : { *(.rela.plt) } 74 .init : { *(.init) } =0x9090 75 76 . = ALIGN(4); 77 _extab_start = .; 78 PROVIDE(extab_start = .); 79 .ARM.extab : { *(.ARM.extab) } 80 _extab.end = .; 81 PROVIDE(extab_end = .); 82 83 _exidx_start = .; 84 PROVIDE(exidx_start = .); 85 .ARM.exidx : { *(.ARM.exidx) } 86 _exidx_end = .; 87 PROVIDE(exidx_end = .); 88 89 /* Adjust the address for the data segment. We want to adjust up to 90 the same address within the page on the next page up. */ 91 . = ALIGN(0x1000) + (. & (0x1000 - 1)) ; 92 .data : 93 { 94 *(.data) 95 *(.gnu.linkonce.d*) 96 } 97 . = ALIGN(128); 98 .data.read_frequently : 99 { 100 *(SORT_BY_ALIGNMENT(.data.read_frequently)) 101 } 102 .data.read_mostly : 103 { 104 *(.data.read_mostly) 105 } 106 . = ALIGN(128); 107 .data.exclusive_cache_line : 108 { 109 *(.data.exclusive_cache_line) 110 } 111 . = ALIGN(128); 112 .data1 : { *(.data1) } 113 . = ALIGN(32 / 8); 114 .init_array : 115 { 116 PROVIDE_HIDDEN (__init_array_start = .); 117 KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*))) 118 KEEP (*(.init_array)) 119 PROVIDE_HIDDEN (__init_array_end = .); 120 } 121 .fini_array : 122 { 123 PROVIDE_HIDDEN (__fini_array_start = .); 124 KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*))) 125 KEEP (*(.fini_array)) 126 PROVIDE_HIDDEN (__fini_array_end = .); 127 } 128 _start_ctors = .; 129 PROVIDE (start_ctors = .); 130 .ctors : 131 { 132 *(.ctors) 133 } 134 _stop_ctors = .; 135 PROVIDE (stop_ctors = .); 136 .dtors : 137 { 138 *(.dtors) 139 } 140 .got : { *(.got.plt) *(.got) } 141 .dynamic : { *(.dynamic) } 142 /* We want the small data sections together, so single-instruction offsets 143 can access them all, and initialized data all before uninitialized, so 144 we can shorten the on-disk segment size. */ 145 . = ALIGN(8); 146 .sdata : { *(.sdata) } 147 _edata = .; 148 PROVIDE (edata = .); 149 . = ALIGN(16); 150 __bss_start = .; 151 .sbss : { *(.sbss) *(.scommon) } 152 .bss : 153 { 154 *(.dynbss) 155 *(.bss) 156 *(COMMON) 157 . = ALIGN(16); 158 __bss_end = .; 159 /* A section for the initial page table, it doesn't need to be in the 160 kernel file, however unlike normal .bss entries should not be zeroed 161 out as we use it before the .bss section is cleared. */ 162 *(.init_pagetable) 163 } 164 _end = . ; 165 PROVIDE (end = .); 166 167 /* Debug */ 168 INCLUDE debuginfo.ldscript 169 170 .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } 171 /DISCARD/ : { *(.note.GNU-stack) } 172} 173