1b75abea4SBrandon BergrenOUTPUT_FORMAT("elf64-powerpcle-freebsd", "elf64-powerpcle-freebsd", 2b75abea4SBrandon Bergren "elf64-powerpcle-freebsd") 3b75abea4SBrandon BergrenOUTPUT_ARCH(powerpc:common64) 4b75abea4SBrandon BergrenENTRY(__start) 5b75abea4SBrandon BergrenSEARCH_DIR(/usr/lib); 6b75abea4SBrandon BergrenPROVIDE (__stack = 0); 7b75abea4SBrandon BergrenPHDRS 8b75abea4SBrandon Bergren{ 93896a6ccSJessica Clarke kernel PT_LOAD; 10b75abea4SBrandon Bergren dynamic PT_DYNAMIC; 11b75abea4SBrandon Bergren} 12b75abea4SBrandon BergrenSECTIONS 13b75abea4SBrandon Bergren{ 14b75abea4SBrandon Bergren 15b75abea4SBrandon Bergren /* Low-address wrapper for bootloaders (kexec/kboot) that can't parse ELF */ 16b75abea4SBrandon Bergren . = kernbase - 0x100; 173896a6ccSJessica Clarke .kboot : { *(.text.kboot) } :kernel 18b75abea4SBrandon Bergren 19b75abea4SBrandon Bergren /* Read-only sections, merged into text segment: */ 20b75abea4SBrandon Bergren . = kernbase; 21b75abea4SBrandon Bergren PROVIDE (begin = .); 22b75abea4SBrandon Bergren 23b75abea4SBrandon Bergren .text : 24b75abea4SBrandon Bergren { 25b75abea4SBrandon Bergren *(.glink) 26b75abea4SBrandon Bergren *(.text) 27b75abea4SBrandon Bergren *(.stub) 28b75abea4SBrandon Bergren /* .gnu.warning sections are handled specially by elf32.em. */ 29b75abea4SBrandon Bergren *(.gnu.warning) 30b75abea4SBrandon Bergren *(.gnu.linkonce.t*) 31b75abea4SBrandon Bergren } =0 32b75abea4SBrandon Bergren _etext = .; 33b75abea4SBrandon Bergren PROVIDE (etext = .); 34b75abea4SBrandon Bergren 35b75abea4SBrandon Bergren /* Do not emit PT_INTERP section, which confuses some loaders (kexec-lite) */ 36b75abea4SBrandon Bergren /DISCARD/ : { *(.interp) } 37b75abea4SBrandon Bergren 38b75abea4SBrandon Bergren .hash : { *(.hash) } 39b75abea4SBrandon Bergren .dynsym : { *(.dynsym) } 40b75abea4SBrandon Bergren .dynstr : { *(.dynstr) } 41b75abea4SBrandon Bergren .gnu.version : { *(.gnu.version) } 42b75abea4SBrandon Bergren .gnu.version_d : { *(.gnu.version_d) } 43b75abea4SBrandon Bergren .gnu.version_r : { *(.gnu.version_r) } 44b75abea4SBrandon Bergren .note.gnu.build-id : { 45b75abea4SBrandon Bergren PROVIDE (__build_id_start = .); 46b75abea4SBrandon Bergren *(.note.gnu.build-id) 47b75abea4SBrandon Bergren PROVIDE (__build_id_end = .); 48b75abea4SBrandon Bergren } 493896a6ccSJessica Clarke 503896a6ccSJessica Clarke /* Do not emit any additional notes. */ 513896a6ccSJessica Clarke /DISCARD/ : { *(.note.*) } 523896a6ccSJessica Clarke 53b75abea4SBrandon Bergren .rela.text : 54b75abea4SBrandon Bergren { *(.rela.text) *(.rela.gnu.linkonce.t*) } 55b75abea4SBrandon Bergren .rela.data : 56b75abea4SBrandon Bergren { *(.rela.data) *(.rela.gnu.linkonce.d*) } 57b75abea4SBrandon Bergren .rela.rodata : 58b75abea4SBrandon Bergren { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } 59b75abea4SBrandon Bergren .rela.got : { *(.rela.got) } 60b75abea4SBrandon Bergren .rela.got1 : { *(.rela.got1) } 61b75abea4SBrandon Bergren .rela.got2 : { *(.rela.got2) } 62b75abea4SBrandon Bergren .rela.ctors : { *(.rela.ctors) } 63b75abea4SBrandon Bergren .rela.dtors : { *(.rela.dtors) } 64b75abea4SBrandon Bergren .rela.init : { *(.rela.init) } 65b75abea4SBrandon Bergren .rela.fini : { *(.rela.fini) } 66b75abea4SBrandon Bergren .rela.bss : { *(.rela.bss) } 67b75abea4SBrandon Bergren .rela.plt : { *(.rela.plt) } 68b75abea4SBrandon Bergren .rela.sdata : { *(.rela.sdata) } 69b75abea4SBrandon Bergren .rela.sbss : { *(.rela.sbss) } 70b75abea4SBrandon Bergren .rela.sdata2 : { *(.rela.sdata2) } 71b75abea4SBrandon Bergren .rela.sbss2 : { *(.rela.sbss2) } 72b75abea4SBrandon Bergren 73b75abea4SBrandon Bergren .init : { *(.init) } =0 74b75abea4SBrandon Bergren .fini : { *(.fini) } =0 75b75abea4SBrandon Bergren .rodata : { *(.rodata) *(.gnu.linkonce.r*) } 76b75abea4SBrandon Bergren .rodata1 : { *(.rodata1) } 77b75abea4SBrandon Bergren .sdata2 : { *(.sdata2) } 78b75abea4SBrandon Bergren .sbss2 : { *(.sbss2) } 79b75abea4SBrandon Bergren /* Adjust the address for the data segment to the next page up. */ 80b75abea4SBrandon Bergren . = ALIGN(4096); 81b75abea4SBrandon Bergren .data.read_frequently : 82b75abea4SBrandon Bergren { 83b75abea4SBrandon Bergren *(SORT_BY_ALIGNMENT(.data.read_frequently)) 84b75abea4SBrandon Bergren } 85b75abea4SBrandon Bergren .data.read_mostly : 86b75abea4SBrandon Bergren { 87b75abea4SBrandon Bergren *(.data.read_mostly) 88b75abea4SBrandon Bergren } 89b75abea4SBrandon Bergren . = ALIGN(128); 90b75abea4SBrandon Bergren .data.exclusive_cache_line : 91b75abea4SBrandon Bergren { 92b75abea4SBrandon Bergren *(.data.exclusive_cache_line) 93b75abea4SBrandon Bergren } 94b75abea4SBrandon Bergren . = ALIGN(128); 95b75abea4SBrandon Bergren .data : 96b75abea4SBrandon Bergren { 97b75abea4SBrandon Bergren *(.data) 98b75abea4SBrandon Bergren *(.gnu.linkonce.d*) 99b75abea4SBrandon Bergren } 100b75abea4SBrandon Bergren .data1 : { *(.data1) } 101b75abea4SBrandon Bergren .toc1 : ALIGN(8) { *(.toc1) } 102b75abea4SBrandon Bergren .opd : ALIGN(8) { KEEP (*(.opd)) } 103b75abea4SBrandon Bergren .branch_lt : ALIGN(8) { *(.branch_lt) } 104b75abea4SBrandon Bergren . = ALIGN(4096); 105b75abea4SBrandon Bergren .got : ALIGN(8) { __tocbase = .; *(.got) } 106b75abea4SBrandon Bergren .toc : ALIGN(8) { *(.toc) } 107*3e76d052SZhenlei Huang .init_array : 108*3e76d052SZhenlei Huang { 109*3e76d052SZhenlei Huang PROVIDE_HIDDEN (__init_array_start = .); 110*3e76d052SZhenlei Huang KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*))) 111*3e76d052SZhenlei Huang KEEP (*(.init_array)) 112*3e76d052SZhenlei Huang PROVIDE_HIDDEN (__init_array_end = .); 113*3e76d052SZhenlei Huang } 114*3e76d052SZhenlei Huang .fini_array : 115*3e76d052SZhenlei Huang { 116*3e76d052SZhenlei Huang PROVIDE_HIDDEN (__fini_array_start = .); 117*3e76d052SZhenlei Huang KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*))) 118*3e76d052SZhenlei Huang KEEP (*(.fini_array)) 119*3e76d052SZhenlei Huang PROVIDE_HIDDEN (__fini_array_end = .); 120*3e76d052SZhenlei Huang } 1213896a6ccSJessica Clarke .dynamic : { *(.dynamic) } :kernel :dynamic 122b75abea4SBrandon Bergren /* Put .ctors and .dtors next to the .got2 section, so that the pointers 123b75abea4SBrandon Bergren get relocated with -mrelocatable. Also put in the .fixup pointers. 124b75abea4SBrandon Bergren The current compiler no longer needs this, but keep it around for 2.7.2 */ 125b75abea4SBrandon Bergren PROVIDE (_GOT2_START_ = .); 1263896a6ccSJessica Clarke .got2 : { *(.got2) } :kernel 127b75abea4SBrandon Bergren PROVIDE (__CTOR_LIST__ = .); 128b75abea4SBrandon Bergren .ctors : { *(.ctors) } 129b75abea4SBrandon Bergren PROVIDE (__CTOR_END__ = .); 130b75abea4SBrandon Bergren PROVIDE (__DTOR_LIST__ = .); 131b75abea4SBrandon Bergren .dtors : { *(.dtors) } 132b75abea4SBrandon Bergren PROVIDE (__DTOR_END__ = .); 133b75abea4SBrandon Bergren PROVIDE (_FIXUP_START_ = .); 134b75abea4SBrandon Bergren .fixup : { *(.fixup) } 135b75abea4SBrandon Bergren PROVIDE (_FIXUP_END_ = .); 136b75abea4SBrandon Bergren PROVIDE (_GOT2_END_ = .); 137b75abea4SBrandon Bergren /* We want the small data sections together, so single-instruction offsets 138b75abea4SBrandon Bergren can access them all, and initialized data all before uninitialized, so 139b75abea4SBrandon Bergren we can shorten the on-disk segment size. */ 140b75abea4SBrandon Bergren .sdata : { *(.sdata) } 141b75abea4SBrandon Bergren _edata = .; 142b75abea4SBrandon Bergren PROVIDE (edata = .); 143b75abea4SBrandon Bergren .sbss : 144b75abea4SBrandon Bergren { 145b75abea4SBrandon Bergren PROVIDE (__sbss_start = .); 146b75abea4SBrandon Bergren *(.sbss) 147b75abea4SBrandon Bergren *(.scommon) 148b75abea4SBrandon Bergren *(.dynsbss) 149b75abea4SBrandon Bergren PROVIDE (__sbss_end = .); 150b75abea4SBrandon Bergren } 151b75abea4SBrandon Bergren .plt : { *(.plt) } 152b75abea4SBrandon Bergren .iplt : { *(.iplt) } 153b75abea4SBrandon Bergren .bss : 154b75abea4SBrandon Bergren { 155b75abea4SBrandon Bergren PROVIDE (__bss_start = .); 156b75abea4SBrandon Bergren *(.dynbss) 157b75abea4SBrandon Bergren *(.bss) 158b75abea4SBrandon Bergren *(COMMON) 159b75abea4SBrandon Bergren } 160b75abea4SBrandon Bergren _end = . ; 161b75abea4SBrandon Bergren PROVIDE (end = .); 16237d6d682SWarner Losh 16337d6d682SWarner Losh /* Debug */ 16437d6d682SWarner Losh INCLUDE debuginfo.ldscript 165b75abea4SBrandon Bergren 16623dff4fdSWarner Losh .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } 16723dff4fdSWarner Losh /DISCARD/ : { *(.note.GNU-stack) } 16823dff4fdSWarner Losh} 169