1*b75abea4SBrandon Bergren/* $FreeBSD$ */ 2*b75abea4SBrandon Bergren 3*b75abea4SBrandon BergrenOUTPUT_FORMAT("elf64-powerpcle-freebsd", "elf64-powerpcle-freebsd", 4*b75abea4SBrandon Bergren "elf64-powerpcle-freebsd") 5*b75abea4SBrandon BergrenOUTPUT_ARCH(powerpc:common64) 6*b75abea4SBrandon BergrenENTRY(__start) 7*b75abea4SBrandon BergrenSEARCH_DIR(/usr/lib); 8*b75abea4SBrandon BergrenPROVIDE (__stack = 0); 9*b75abea4SBrandon BergrenPHDRS 10*b75abea4SBrandon Bergren{ 11*b75abea4SBrandon Bergren text PT_LOAD ; 12*b75abea4SBrandon Bergren dynamic PT_DYNAMIC ; 13*b75abea4SBrandon Bergren} 14*b75abea4SBrandon BergrenSECTIONS 15*b75abea4SBrandon Bergren{ 16*b75abea4SBrandon Bergren 17*b75abea4SBrandon Bergren /* Low-address wrapper for bootloaders (kexec/kboot) that can't parse ELF */ 18*b75abea4SBrandon Bergren . = kernbase - 0x100; 19*b75abea4SBrandon Bergren .kboot : { *(.text.kboot) } :text 20*b75abea4SBrandon Bergren 21*b75abea4SBrandon Bergren /* Read-only sections, merged into text segment: */ 22*b75abea4SBrandon Bergren . = kernbase; 23*b75abea4SBrandon Bergren PROVIDE (begin = .); 24*b75abea4SBrandon Bergren 25*b75abea4SBrandon Bergren .text : 26*b75abea4SBrandon Bergren { 27*b75abea4SBrandon Bergren *(.glink) 28*b75abea4SBrandon Bergren *(.text) 29*b75abea4SBrandon Bergren *(.stub) 30*b75abea4SBrandon Bergren /* .gnu.warning sections are handled specially by elf32.em. */ 31*b75abea4SBrandon Bergren *(.gnu.warning) 32*b75abea4SBrandon Bergren *(.gnu.linkonce.t*) 33*b75abea4SBrandon Bergren } =0 34*b75abea4SBrandon Bergren _etext = .; 35*b75abea4SBrandon Bergren PROVIDE (etext = .); 36*b75abea4SBrandon Bergren 37*b75abea4SBrandon Bergren /* Do not emit PT_INTERP section, which confuses some loaders (kexec-lite) */ 38*b75abea4SBrandon Bergren /DISCARD/ : { *(.interp) } 39*b75abea4SBrandon Bergren 40*b75abea4SBrandon Bergren /* Also delete notes */ 41*b75abea4SBrandon Bergren /DISCARD/ : { *(.note.*) } 42*b75abea4SBrandon Bergren 43*b75abea4SBrandon Bergren .hash : { *(.hash) } 44*b75abea4SBrandon Bergren .dynsym : { *(.dynsym) } 45*b75abea4SBrandon Bergren .dynstr : { *(.dynstr) } 46*b75abea4SBrandon Bergren .gnu.version : { *(.gnu.version) } 47*b75abea4SBrandon Bergren .gnu.version_d : { *(.gnu.version_d) } 48*b75abea4SBrandon Bergren .gnu.version_r : { *(.gnu.version_r) } 49*b75abea4SBrandon Bergren .note.gnu.build-id : { 50*b75abea4SBrandon Bergren PROVIDE (__build_id_start = .); 51*b75abea4SBrandon Bergren *(.note.gnu.build-id) 52*b75abea4SBrandon Bergren PROVIDE (__build_id_end = .); 53*b75abea4SBrandon Bergren } 54*b75abea4SBrandon Bergren .rela.text : 55*b75abea4SBrandon Bergren { *(.rela.text) *(.rela.gnu.linkonce.t*) } 56*b75abea4SBrandon Bergren .rela.data : 57*b75abea4SBrandon Bergren { *(.rela.data) *(.rela.gnu.linkonce.d*) } 58*b75abea4SBrandon Bergren .rela.rodata : 59*b75abea4SBrandon Bergren { *(.rela.rodata) *(.rela.gnu.linkonce.r*) } 60*b75abea4SBrandon Bergren .rela.got : { *(.rela.got) } 61*b75abea4SBrandon Bergren .rela.got1 : { *(.rela.got1) } 62*b75abea4SBrandon Bergren .rela.got2 : { *(.rela.got2) } 63*b75abea4SBrandon Bergren .rela.ctors : { *(.rela.ctors) } 64*b75abea4SBrandon Bergren .rela.dtors : { *(.rela.dtors) } 65*b75abea4SBrandon Bergren .rela.init : { *(.rela.init) } 66*b75abea4SBrandon Bergren .rela.fini : { *(.rela.fini) } 67*b75abea4SBrandon Bergren .rela.bss : { *(.rela.bss) } 68*b75abea4SBrandon Bergren .rela.plt : { *(.rela.plt) } 69*b75abea4SBrandon Bergren .rela.sdata : { *(.rela.sdata) } 70*b75abea4SBrandon Bergren .rela.sbss : { *(.rela.sbss) } 71*b75abea4SBrandon Bergren .rela.sdata2 : { *(.rela.sdata2) } 72*b75abea4SBrandon Bergren .rela.sbss2 : { *(.rela.sbss2) } 73*b75abea4SBrandon Bergren 74*b75abea4SBrandon Bergren .init : { *(.init) } =0 75*b75abea4SBrandon Bergren .fini : { *(.fini) } =0 76*b75abea4SBrandon Bergren .rodata : { *(.rodata) *(.gnu.linkonce.r*) } 77*b75abea4SBrandon Bergren .rodata1 : { *(.rodata1) } 78*b75abea4SBrandon Bergren .sdata2 : { *(.sdata2) } 79*b75abea4SBrandon Bergren .sbss2 : { *(.sbss2) } 80*b75abea4SBrandon Bergren /* Adjust the address for the data segment to the next page up. */ 81*b75abea4SBrandon Bergren . = ALIGN(4096); 82*b75abea4SBrandon Bergren .data.read_frequently : 83*b75abea4SBrandon Bergren { 84*b75abea4SBrandon Bergren *(SORT_BY_ALIGNMENT(.data.read_frequently)) 85*b75abea4SBrandon Bergren } 86*b75abea4SBrandon Bergren .data.read_mostly : 87*b75abea4SBrandon Bergren { 88*b75abea4SBrandon Bergren *(.data.read_mostly) 89*b75abea4SBrandon Bergren } 90*b75abea4SBrandon Bergren . = ALIGN(128); 91*b75abea4SBrandon Bergren .data.exclusive_cache_line : 92*b75abea4SBrandon Bergren { 93*b75abea4SBrandon Bergren *(.data.exclusive_cache_line) 94*b75abea4SBrandon Bergren } 95*b75abea4SBrandon Bergren . = ALIGN(128); 96*b75abea4SBrandon Bergren .data : 97*b75abea4SBrandon Bergren { 98*b75abea4SBrandon Bergren *(.data) 99*b75abea4SBrandon Bergren *(.gnu.linkonce.d*) 100*b75abea4SBrandon Bergren } 101*b75abea4SBrandon Bergren .data1 : { *(.data1) } 102*b75abea4SBrandon Bergren .toc1 : ALIGN(8) { *(.toc1) } 103*b75abea4SBrandon Bergren .opd : ALIGN(8) { KEEP (*(.opd)) } 104*b75abea4SBrandon Bergren .branch_lt : ALIGN(8) { *(.branch_lt) } 105*b75abea4SBrandon Bergren . = ALIGN(4096); 106*b75abea4SBrandon Bergren .got : ALIGN(8) { __tocbase = .; *(.got) } 107*b75abea4SBrandon Bergren .toc : ALIGN(8) { *(.toc) } 108*b75abea4SBrandon Bergren 109*b75abea4SBrandon Bergren .dynamic : { *(.dynamic) } :text :dynamic 110*b75abea4SBrandon Bergren /* Put .ctors and .dtors next to the .got2 section, so that the pointers 111*b75abea4SBrandon Bergren get relocated with -mrelocatable. Also put in the .fixup pointers. 112*b75abea4SBrandon Bergren The current compiler no longer needs this, but keep it around for 2.7.2 */ 113*b75abea4SBrandon Bergren PROVIDE (_GOT2_START_ = .); 114*b75abea4SBrandon Bergren .got2 : { *(.got2) } 115*b75abea4SBrandon Bergren PROVIDE (__CTOR_LIST__ = .); 116*b75abea4SBrandon Bergren .ctors : { *(.ctors) } 117*b75abea4SBrandon Bergren PROVIDE (__CTOR_END__ = .); 118*b75abea4SBrandon Bergren PROVIDE (__DTOR_LIST__ = .); 119*b75abea4SBrandon Bergren .dtors : { *(.dtors) } 120*b75abea4SBrandon Bergren PROVIDE (__DTOR_END__ = .); 121*b75abea4SBrandon Bergren PROVIDE (_FIXUP_START_ = .); 122*b75abea4SBrandon Bergren .fixup : { *(.fixup) } 123*b75abea4SBrandon Bergren PROVIDE (_FIXUP_END_ = .); 124*b75abea4SBrandon Bergren PROVIDE (_GOT2_END_ = .); 125*b75abea4SBrandon Bergren /* We want the small data sections together, so single-instruction offsets 126*b75abea4SBrandon Bergren can access them all, and initialized data all before uninitialized, so 127*b75abea4SBrandon Bergren we can shorten the on-disk segment size. */ 128*b75abea4SBrandon Bergren .sdata : { *(.sdata) } 129*b75abea4SBrandon Bergren _edata = .; 130*b75abea4SBrandon Bergren PROVIDE (edata = .); 131*b75abea4SBrandon Bergren .sbss : 132*b75abea4SBrandon Bergren { 133*b75abea4SBrandon Bergren PROVIDE (__sbss_start = .); 134*b75abea4SBrandon Bergren *(.sbss) 135*b75abea4SBrandon Bergren *(.scommon) 136*b75abea4SBrandon Bergren *(.dynsbss) 137*b75abea4SBrandon Bergren PROVIDE (__sbss_end = .); 138*b75abea4SBrandon Bergren } 139*b75abea4SBrandon Bergren .plt : { *(.plt) } 140*b75abea4SBrandon Bergren .iplt : { *(.iplt) } 141*b75abea4SBrandon Bergren .bss : 142*b75abea4SBrandon Bergren { 143*b75abea4SBrandon Bergren PROVIDE (__bss_start = .); 144*b75abea4SBrandon Bergren *(.dynbss) 145*b75abea4SBrandon Bergren *(.bss) 146*b75abea4SBrandon Bergren *(COMMON) 147*b75abea4SBrandon Bergren } 148*b75abea4SBrandon Bergren _end = . ; 149*b75abea4SBrandon Bergren PROVIDE (end = .); 150*b75abea4SBrandon Bergren /* Stabs debugging sections. */ 151*b75abea4SBrandon Bergren .stab 0 : { *(.stab) } 152*b75abea4SBrandon Bergren .stabstr 0 : { *(.stabstr) } 153*b75abea4SBrandon Bergren /* DWARF debug sections. 154*b75abea4SBrandon Bergren Symbols in the DWARF debugging sections are relative to the beginning 155*b75abea4SBrandon Bergren of the section so we begin them at 0. */ 156*b75abea4SBrandon Bergren /* DWARF 1 */ 157*b75abea4SBrandon Bergren .debug 0 : { *(.debug) } 158*b75abea4SBrandon Bergren .line 0 : { *(.line) } 159*b75abea4SBrandon Bergren /* GNU DWARF 1 extensions */ 160*b75abea4SBrandon Bergren .debug_srcinfo 0 : { *(.debug_srcinfo) } 161*b75abea4SBrandon Bergren .debug_sfnames 0 : { *(.debug_sfnames) } 162*b75abea4SBrandon Bergren /* DWARF 1.1 and DWARF 2 */ 163*b75abea4SBrandon Bergren .debug_aranges 0 : { *(.debug_aranges) } 164*b75abea4SBrandon Bergren .debug_pubnames 0 : { *(.debug_pubnames) } 165*b75abea4SBrandon Bergren /* DWARF 2 */ 166*b75abea4SBrandon Bergren .debug_info 0 : { *(.debug_info) } 167*b75abea4SBrandon Bergren .debug_abbrev 0 : { *(.debug_abbrev) } 168*b75abea4SBrandon Bergren .debug_line 0 : { *(.debug_line) } 169*b75abea4SBrandon Bergren .debug_frame 0 : { *(.debug_frame) } 170*b75abea4SBrandon Bergren .debug_str 0 : { *(.debug_str) } 171*b75abea4SBrandon Bergren .debug_loc 0 : { *(.debug_loc) } 172*b75abea4SBrandon Bergren .debug_macinfo 0 : { *(.debug_macinfo) } 173*b75abea4SBrandon Bergren /* SGI/MIPS DWARF 2 extensions */ 174*b75abea4SBrandon Bergren .debug_weaknames 0 : { *(.debug_weaknames) } 175*b75abea4SBrandon Bergren .debug_funcnames 0 : { *(.debug_funcnames) } 176*b75abea4SBrandon Bergren .debug_typenames 0 : { *(.debug_typenames) } 177*b75abea4SBrandon Bergren .debug_varnames 0 : { *(.debug_varnames) } 178*b75abea4SBrandon Bergren /* These must appear regardless of . */ 179*b75abea4SBrandon Bergren} 180*b75abea4SBrandon Bergren 181