1e5acd89cSAndrew TurnerOUTPUT_ARCH(aarch64) 2e5acd89cSAndrew TurnerENTRY(_start) 3e5acd89cSAndrew Turner 4e5acd89cSAndrew TurnerSEARCH_DIR(/usr/lib); 5e5acd89cSAndrew TurnerSECTIONS 6e5acd89cSAndrew Turner{ 7e5acd89cSAndrew Turner /* Read-only sections, merged into text segment: */ 831333ebbSIan Lepore . = text_start; /* This is set using --defsym= on the command line. */ 947e07394SAndrew Turner .vmm_vectors : { *(.vmm_vectors) } 10e5acd89cSAndrew Turner .text : 11e5acd89cSAndrew Turner { 12e5acd89cSAndrew Turner *(.text) 13e5acd89cSAndrew Turner *(.stub) 14e5acd89cSAndrew Turner /* .gnu.warning sections are handled specially by elf32.em. */ 15e5acd89cSAndrew Turner *(.gnu.warning) 16e5acd89cSAndrew Turner *(.gnu.linkonce.t*) 17e5acd89cSAndrew Turner } =0x9090 18e5acd89cSAndrew Turner _etext = .; 19e5acd89cSAndrew Turner PROVIDE (etext = .); 2047e07394SAndrew Turner 21e5acd89cSAndrew Turner .fini : { *(.fini) } =0x9090 226f0c70d4SAndrew Turner .rodata : { *(.rodata*) *(.gnu.linkonce.r*) } 23e5acd89cSAndrew Turner .rodata1 : { *(.rodata1) } 24e5acd89cSAndrew Turner .interp : { *(.interp) } 25e5acd89cSAndrew Turner .hash : { *(.hash) } 26e5acd89cSAndrew Turner .dynsym : { *(.dynsym) } 27e5acd89cSAndrew Turner .dynstr : { *(.dynstr) } 28e5acd89cSAndrew Turner .gnu.version : { *(.gnu.version) } 29e5acd89cSAndrew Turner .gnu.version_d : { *(.gnu.version_d) } 30e5acd89cSAndrew Turner .gnu.version_r : { *(.gnu.version_r) } 3174cd06b4SEd Maste .note.gnu.build-id : { 3274cd06b4SEd Maste PROVIDE (__build_id_start = .); 3374cd06b4SEd Maste *(.note.gnu.build-id) 3474cd06b4SEd Maste PROVIDE (__build_id_end = .); 3574cd06b4SEd Maste } 36e5acd89cSAndrew Turner .rel.text : 37e5acd89cSAndrew Turner { *(.rel.text) *(.rel.gnu.linkonce.t*) } 38e5acd89cSAndrew Turner .rela.text : 39e5acd89cSAndrew Turner { *(.rela.text) *(.rela.gnu.linkonce.t*) } 40e5acd89cSAndrew Turner .rel.data : 41e5acd89cSAndrew Turner { *(.rel.data) *(.rel.gnu.linkonce.d*) } 42e5acd89cSAndrew Turner .rela.data : 43e5acd89cSAndrew Turner { *(.rela.data) *(.rela.gnu.linkonce.d*) } 44e5acd89cSAndrew Turner .rel.rodata : 45e5acd89cSAndrew Turner { *(.rel.rodata) *(.rel.gnu.linkonce.r*) } 46e5acd89cSAndrew Turner .rela.rodata : 47e5acd89cSAndrew Turner { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } 48e5acd89cSAndrew Turner .rel.got : { *(.rel.got) } 49e5acd89cSAndrew Turner .rela.got : { *(.rela.got) } 50e5acd89cSAndrew Turner .rel.ctors : { *(.rel.ctors) } 51e5acd89cSAndrew Turner .rela.ctors : { *(.rela.ctors) } 52e5acd89cSAndrew Turner .rel.dtors : { *(.rel.dtors) } 53e5acd89cSAndrew Turner .rela.dtors : { *(.rela.dtors) } 54e5acd89cSAndrew Turner .rel.init : { *(.rel.init) } 55e5acd89cSAndrew Turner .rela.init : { *(.rela.init) } 56e5acd89cSAndrew Turner .rel.fini : { *(.rel.fini) } 57e5acd89cSAndrew Turner .rela.fini : { *(.rela.fini) } 58e5acd89cSAndrew Turner .rel.bss : { *(.rel.bss) } 59e5acd89cSAndrew Turner .rela.bss : { *(.rela.bss) } 60e5acd89cSAndrew Turner .rel.plt : { *(.rel.plt) } 61e5acd89cSAndrew Turner .rela.plt : { *(.rela.plt) } 62e5acd89cSAndrew Turner .init : { *(.init) } =0x9090 63e5acd89cSAndrew Turner .plt : { *(.plt) } 64e5acd89cSAndrew Turner 65e5acd89cSAndrew Turner . = ALIGN(4); 66e5acd89cSAndrew Turner _extab_start = .; 67e5acd89cSAndrew Turner PROVIDE(extab_start = .); 68e5acd89cSAndrew Turner .ARM.extab : { *(.ARM.extab) } 69e5acd89cSAndrew Turner _extab.end = .; 70e5acd89cSAndrew Turner PROVIDE(extab_end = .); 71e5acd89cSAndrew Turner 72e5acd89cSAndrew Turner _exidx_start = .; 73e5acd89cSAndrew Turner PROVIDE(exidx_start = .); 74e5acd89cSAndrew Turner .ARM.exidx : { *(.ARM.exidx) } 75e5acd89cSAndrew Turner _exidx_end = .; 76e5acd89cSAndrew Turner PROVIDE(exidx_end = .); 77e5acd89cSAndrew Turner 78e5acd89cSAndrew Turner /* Adjust the address for the data segment. We want to adjust up to 79e5acd89cSAndrew Turner the same address within the page on the next page up. */ 80e5acd89cSAndrew Turner . = ALIGN(0x1000) + (. & (0x1000 - 1)) ; 81e5acd89cSAndrew Turner .data : 82e5acd89cSAndrew Turner { 83e5acd89cSAndrew Turner *(.data) 84e5acd89cSAndrew Turner *(.gnu.linkonce.d*) 85e5acd89cSAndrew Turner } 86766a7c73SMateusz Guzik . = ALIGN(128); 87766a7c73SMateusz Guzik .data.read_frequently : 88766a7c73SMateusz Guzik { 89766a7c73SMateusz Guzik *(SORT_BY_ALIGNMENT(.data.read_frequently)) 90766a7c73SMateusz Guzik } 91766a7c73SMateusz Guzik .data.read_mostly : 92766a7c73SMateusz Guzik { 93766a7c73SMateusz Guzik *(.data.read_mostly) 94766a7c73SMateusz Guzik } 95766a7c73SMateusz Guzik . = ALIGN(128); 96766a7c73SMateusz Guzik .data.exclusive_cache_line : 97766a7c73SMateusz Guzik { 98766a7c73SMateusz Guzik *(.data.exclusive_cache_line) 99766a7c73SMateusz Guzik } 100766a7c73SMateusz Guzik . = ALIGN(128); 101e5acd89cSAndrew Turner .data1 : { *(.data1) } 102e5acd89cSAndrew Turner . = ALIGN(32 / 8); 103*3e76d052SZhenlei Huang .init_array : 104*3e76d052SZhenlei Huang { 105*3e76d052SZhenlei Huang PROVIDE_HIDDEN (__init_array_start = .); 106*3e76d052SZhenlei Huang KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*))) 107*3e76d052SZhenlei Huang KEEP (*(.init_array)) 108*3e76d052SZhenlei Huang PROVIDE_HIDDEN (__init_array_end = .); 109*3e76d052SZhenlei Huang } 110*3e76d052SZhenlei Huang .fini_array : 111*3e76d052SZhenlei Huang { 112*3e76d052SZhenlei Huang PROVIDE_HIDDEN (__fini_array_start = .); 113*3e76d052SZhenlei Huang KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*))) 114*3e76d052SZhenlei Huang KEEP (*(.fini_array)) 115*3e76d052SZhenlei Huang PROVIDE_HIDDEN (__fini_array_end = .); 116*3e76d052SZhenlei Huang } 117e5acd89cSAndrew Turner _start_ctors = .; 118e5acd89cSAndrew Turner PROVIDE (start_ctors = .); 119e5acd89cSAndrew Turner .ctors : 120e5acd89cSAndrew Turner { 121e5acd89cSAndrew Turner *(.ctors) 122e5acd89cSAndrew Turner } 123e5acd89cSAndrew Turner _stop_ctors = .; 124e5acd89cSAndrew Turner PROVIDE (stop_ctors = .); 125e5acd89cSAndrew Turner .dtors : 126e5acd89cSAndrew Turner { 127e5acd89cSAndrew Turner *(.dtors) 128e5acd89cSAndrew Turner } 129e5acd89cSAndrew Turner .got : { *(.got.plt) *(.got) } 130e5acd89cSAndrew Turner .dynamic : { *(.dynamic) } 131e5acd89cSAndrew Turner /* We want the small data sections together, so single-instruction offsets 132e5acd89cSAndrew Turner can access them all, and initialized data all before uninitialized, so 133e5acd89cSAndrew Turner we can shorten the on-disk segment size. */ 134e5acd89cSAndrew Turner . = ALIGN(8); 135e5acd89cSAndrew Turner .sdata : { *(.sdata) } 136e5acd89cSAndrew Turner _edata = .; 137e5acd89cSAndrew Turner PROVIDE (edata = .); 138f1bc3750SAndrew Turner . = ALIGN(16); 139e5acd89cSAndrew Turner __bss_start = .; 140e5acd89cSAndrew Turner .sbss : { *(.sbss) *(.scommon) } 141e5acd89cSAndrew Turner .bss : 142e5acd89cSAndrew Turner { 143e5acd89cSAndrew Turner *(.dynbss) 144e5acd89cSAndrew Turner *(.bss) 145e5acd89cSAndrew Turner *(COMMON) 146f1bc3750SAndrew Turner . = ALIGN(16); 147166ceb6fSAndrew Turner __bss_end = .; 148166ceb6fSAndrew Turner /* A section for the initial page table, it doesn't need to be in the 149166ceb6fSAndrew Turner kernel file, however unlike normal .bss entries should not be zeroed 150166ceb6fSAndrew Turner out as we use it before the .bss section is cleared. */ 151166ceb6fSAndrew Turner *(.init_pagetable) 152166ceb6fSAndrew Turner } 153e5acd89cSAndrew Turner _end = . ; 154e5acd89cSAndrew Turner PROVIDE (end = .); 15537d6d682SWarner Losh 15637d6d682SWarner Losh /* Debug */ 15737d6d682SWarner Losh INCLUDE debuginfo.ldscript 15823dff4fdSWarner Losh 15923dff4fdSWarner Losh .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } 16023dff4fdSWarner Losh /DISCARD/ : { *(.note.GNU-stack) } 161e5acd89cSAndrew Turner} 162