155825Speter/* $FreeBSD$ */ 2218822SdimOUTPUT_FORMAT("elf64-x86-64-freebsd", "elf64-x86-64-freebsd", "elf64-x86-64-freebsd") 3114370SpeterOUTPUT_ARCH(i386:x86-64) 439818SpeterENTRY(btext) 5114370SpeterSEARCH_DIR("/usr/lib"); 639818SpeterSECTIONS 739818Speter{ 839818Speter /* Read-only sections, merged into text segment: */ 9220090Salc kernphys = CONSTANT (MAXPAGESIZE); 10220090Salc . = kernbase + kernphys + SIZEOF_HEADERS; 11114370Speter .interp : { *(.interp) } 12114370Speter .hash : { *(.hash) } 13218822Sdim .gnu.hash : { *(.gnu.hash) } 14114370Speter .dynsym : { *(.dynsym) } 15114370Speter .dynstr : { *(.dynstr) } 16114370Speter .gnu.version : { *(.gnu.version) } 17114370Speter .gnu.version_d : { *(.gnu.version_d) } 18114370Speter .gnu.version_r : { *(.gnu.version_r) } 19114370Speter .rel.init : { *(.rel.init) } 20114370Speter .rela.init : { *(.rela.init) } 21114370Speter .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } 22114370Speter .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } 23114370Speter .rel.fini : { *(.rel.fini) } 24114370Speter .rela.fini : { *(.rela.fini) } 25114370Speter .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } 26114370Speter .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } 27218822Sdim .rel.data.rel.ro : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) } 28218822Sdim .rela.data.rel.ro : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) } 29114370Speter .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } 30114370Speter .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } 31114370Speter .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } 32114370Speter .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } 33114370Speter .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } 34114370Speter .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } 35114370Speter .rel.ctors : { *(.rel.ctors) } 36114370Speter .rela.ctors : { *(.rela.ctors) } 37114370Speter .rel.dtors : { *(.rel.dtors) } 38114370Speter .rela.dtors : { *(.rela.dtors) } 39114370Speter .rel.got : { *(.rel.got) } 40114370Speter .rela.got : { *(.rela.got) } 41114370Speter .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } 42114370Speter .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } 43218822Sdim .rel.ldata : { *(.rel.ldata .rel.ldata.* .rel.gnu.linkonce.l.*) } 44218822Sdim .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } 45218822Sdim .rel.lbss : { *(.rel.lbss .rel.lbss.* .rel.gnu.linkonce.lb.*) } 46218822Sdim .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } 47218822Sdim .rel.lrodata : { *(.rel.lrodata .rel.lrodata.* .rel.gnu.linkonce.lr.*) } 48218822Sdim .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } 49114370Speter .rel.plt : { *(.rel.plt) } 50114370Speter .rela.plt : { *(.rela.plt) } 51114370Speter .init : 5239818Speter { 53114370Speter KEEP (*(.init)) 54114370Speter } =0x90909090 55114370Speter .plt : { *(.plt) } 56114370Speter .text : 57114370Speter { 58114370Speter *(.text .stub .text.* .gnu.linkonce.t.*) 59218822Sdim KEEP (*(.text.*personality*)) 6039818Speter /* .gnu.warning sections are handled specially by elf32.em. */ 6139818Speter *(.gnu.warning) 62114370Speter } =0x90909090 63114370Speter .fini : 64114370Speter { 65114370Speter KEEP (*(.fini)) 66114370Speter } =0x90909090 67114370Speter PROVIDE (__etext = .); 68114370Speter PROVIDE (_etext = .); 6939818Speter PROVIDE (etext = .); 70114370Speter .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 71114370Speter .rodata1 : { *(.rodata1) } 72114370Speter .eh_frame_hdr : { *(.eh_frame_hdr) } 73218822Sdim .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } 74218822Sdim .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } 7539818Speter /* Adjust the address for the data segment. We want to adjust up to 7639818Speter the same address within the page on the next page up. */ 77218822Sdim . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); 78218822Sdim /* Exception handling */ 79218822Sdim .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } 80218822Sdim .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } 81218822Sdim /* Thread Local Storage sections */ 82218822Sdim .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } 83218822Sdim .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } 84218822Sdim .preinit_array : 8539818Speter { 86218822Sdim PROVIDE_HIDDEN (__preinit_array_start = .); 87218822Sdim KEEP (*(.preinit_array)) 88218822Sdim PROVIDE_HIDDEN (__preinit_array_end = .); 8939818Speter } 90218822Sdim .init_array : 91218822Sdim { 92218822Sdim PROVIDE_HIDDEN (__init_array_start = .); 93218822Sdim KEEP (*(SORT(.init_array.*))) 94218822Sdim KEEP (*(.init_array)) 95218822Sdim PROVIDE_HIDDEN (__init_array_end = .); 96218822Sdim } 97218822Sdim .fini_array : 98218822Sdim { 99218822Sdim PROVIDE_HIDDEN (__fini_array_start = .); 100218822Sdim KEEP (*(.fini_array)) 101218822Sdim KEEP (*(SORT(.fini_array.*))) 102218822Sdim PROVIDE_HIDDEN (__fini_array_end = .); 103218822Sdim } 104129824Stjr _start_ctors = .; 105129824Stjr PROVIDE (start_ctors = .); 106114370Speter .ctors : 10739818Speter { 108114370Speter /* gcc uses crtbegin.o to find the start of 109114370Speter the constructors, so we make sure it is 110114370Speter first. Because this is a wildcard, it 111114370Speter doesn't matter if the user does not 112114370Speter actually link against crtbegin.o; the 113114370Speter linker won't look for a file to match a 114114370Speter wildcard. The wildcard also means that it 115114370Speter doesn't matter which directory crtbegin.o 116114370Speter is in. */ 117114370Speter KEEP (*crtbegin.o(.ctors)) 118218822Sdim KEEP (*crtbegin?.o(.ctors)) 119114370Speter /* We don't want to include the .ctor section from 120218822Sdim the crtend.o file until after the sorted ctors. 121114370Speter The .ctor section from the crtend file contains the 122114370Speter end of ctors marker and it must be last */ 123218822Sdim KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) 124114370Speter KEEP (*(SORT(.ctors.*))) 125114370Speter KEEP (*(.ctors)) 12639818Speter } 127129824Stjr _stop_ctors = .; 128129824Stjr PROVIDE (stop_ctors = .); 129114370Speter .dtors : 13039818Speter { 131114370Speter KEEP (*crtbegin.o(.dtors)) 132218822Sdim KEEP (*crtbegin?.o(.dtors)) 133218822Sdim KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) 134114370Speter KEEP (*(SORT(.dtors.*))) 135114370Speter KEEP (*(.dtors)) 13639818Speter } 137114370Speter .jcr : { KEEP (*(.jcr)) } 138218822Sdim .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) } 139218822Sdim .dynamic : { *(.dynamic) } 140218822Sdim .got : { *(.got) } 141218822Sdim . = DATA_SEGMENT_RELRO_END (24, .); 142218822Sdim .got.plt : { *(.got.plt) } 143218822Sdim .data : 144218822Sdim { 145218822Sdim *(.data .data.* .gnu.linkonce.d.*) 146218822Sdim KEEP (*(.gnu.linkonce.d.*personality*)) 147218822Sdim SORT(CONSTRUCTORS) 148218822Sdim } 149218822Sdim .data1 : { *(.data1) } 150218822Sdim _edata = .; PROVIDE (edata = .); 15139818Speter __bss_start = .; 152114370Speter .bss : 15339818Speter { 15439818Speter *(.dynbss) 155114370Speter *(.bss .bss.* .gnu.linkonce.b.*) 15639818Speter *(COMMON) 157114370Speter /* Align here to ensure that the .bss section occupies space up to 158114370Speter _end. Align after .bss to ensure correct alignment even if the 159218822Sdim .bss section disappears because there are no input sections. 160218822Sdim FIXME: Why do we need it? When there is no .bss section, we don't 161218822Sdim pad the .data section. */ 162218822Sdim . = ALIGN(. != 0 ? 64 / 8 : 1); 16339818Speter } 164218822Sdim .lbss : 165218822Sdim { 166218822Sdim *(.dynlbss) 167218822Sdim *(.lbss .lbss.* .gnu.linkonce.lb.*) 168218822Sdim *(LARGE_COMMON) 169218822Sdim } 170114370Speter . = ALIGN(64 / 8); 171218822Sdim .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : 172218822Sdim { 173218822Sdim *(.lrodata .lrodata.* .gnu.linkonce.lr.*) 174218822Sdim } 175218822Sdim .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : 176218822Sdim { 177218822Sdim *(.ldata .ldata.* .gnu.linkonce.l.*) 178218822Sdim . = ALIGN(. != 0 ? 64 / 8 : 1); 179218822Sdim } 180218822Sdim . = ALIGN(64 / 8); 181218822Sdim _end = .; PROVIDE (end = .); 182114370Speter . = DATA_SEGMENT_END (.); 18339818Speter /* Stabs debugging sections. */ 184114370Speter .stab 0 : { *(.stab) } 185114370Speter .stabstr 0 : { *(.stabstr) } 186114370Speter .stab.excl 0 : { *(.stab.excl) } 187114370Speter .stab.exclstr 0 : { *(.stab.exclstr) } 188114370Speter .stab.index 0 : { *(.stab.index) } 18939818Speter .stab.indexstr 0 : { *(.stab.indexstr) } 190114370Speter .comment 0 : { *(.comment) } 19139818Speter /* DWARF debug sections. 19239818Speter Symbols in the DWARF debugging sections are relative to the beginning 19339818Speter of the section so we begin them at 0. */ 19439818Speter /* DWARF 1 */ 19539818Speter .debug 0 : { *(.debug) } 19639818Speter .line 0 : { *(.line) } 19739818Speter /* GNU DWARF 1 extensions */ 19839818Speter .debug_srcinfo 0 : { *(.debug_srcinfo) } 19939818Speter .debug_sfnames 0 : { *(.debug_sfnames) } 20039818Speter /* DWARF 1.1 and DWARF 2 */ 20139818Speter .debug_aranges 0 : { *(.debug_aranges) } 20239818Speter .debug_pubnames 0 : { *(.debug_pubnames) } 20339818Speter /* DWARF 2 */ 204114370Speter .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } 20539818Speter .debug_abbrev 0 : { *(.debug_abbrev) } 20639818Speter .debug_line 0 : { *(.debug_line) } 20739818Speter .debug_frame 0 : { *(.debug_frame) } 20839818Speter .debug_str 0 : { *(.debug_str) } 20939818Speter .debug_loc 0 : { *(.debug_loc) } 21039818Speter .debug_macinfo 0 : { *(.debug_macinfo) } 21139818Speter /* SGI/MIPS DWARF 2 extensions */ 21239818Speter .debug_weaknames 0 : { *(.debug_weaknames) } 21339818Speter .debug_funcnames 0 : { *(.debug_funcnames) } 21439818Speter .debug_typenames 0 : { *(.debug_typenames) } 21539818Speter .debug_varnames 0 : { *(.debug_varnames) } 216218822Sdim /* DWARF 3 */ 217218822Sdim .debug_pubtypes 0 : { *(.debug_pubtypes) } 218218822Sdim .debug_ranges 0 : { *(.debug_ranges) } 219218822Sdim .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } 220218822Sdim /DISCARD/ : { *(.note.GNU-stack) } 22139818Speter} 222