ldscript.amd64 revision 218822
155825Speter/* $FreeBSD: head/sys/conf/ldscript.amd64 218822 2011-02-18 20:54:12Z dim $ */ 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: */ 9218822Sdim . = kernbase + CONSTANT (MAXPAGESIZE) + SIZEOF_HEADERS; 10114370Speter .interp : { *(.interp) } 11114370Speter .hash : { *(.hash) } 12218822Sdim .gnu.hash : { *(.gnu.hash) } 13114370Speter .dynsym : { *(.dynsym) } 14114370Speter .dynstr : { *(.dynstr) } 15114370Speter .gnu.version : { *(.gnu.version) } 16114370Speter .gnu.version_d : { *(.gnu.version_d) } 17114370Speter .gnu.version_r : { *(.gnu.version_r) } 18114370Speter .rel.init : { *(.rel.init) } 19114370Speter .rela.init : { *(.rela.init) } 20114370Speter .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } 21114370Speter .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } 22114370Speter .rel.fini : { *(.rel.fini) } 23114370Speter .rela.fini : { *(.rela.fini) } 24114370Speter .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } 25114370Speter .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } 26218822Sdim .rel.data.rel.ro : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) } 27218822Sdim .rela.data.rel.ro : { *(.rela.data.rel.ro* .rela.gnu.linkonce.d.rel.ro.*) } 28114370Speter .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } 29114370Speter .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } 30114370Speter .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } 31114370Speter .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } 32114370Speter .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } 33114370Speter .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } 34114370Speter .rel.ctors : { *(.rel.ctors) } 35114370Speter .rela.ctors : { *(.rela.ctors) } 36114370Speter .rel.dtors : { *(.rel.dtors) } 37114370Speter .rela.dtors : { *(.rela.dtors) } 38114370Speter .rel.got : { *(.rel.got) } 39114370Speter .rela.got : { *(.rela.got) } 40114370Speter .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } 41114370Speter .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } 42218822Sdim .rel.ldata : { *(.rel.ldata .rel.ldata.* .rel.gnu.linkonce.l.*) } 43218822Sdim .rela.ldata : { *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*) } 44218822Sdim .rel.lbss : { *(.rel.lbss .rel.lbss.* .rel.gnu.linkonce.lb.*) } 45218822Sdim .rela.lbss : { *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*) } 46218822Sdim .rel.lrodata : { *(.rel.lrodata .rel.lrodata.* .rel.gnu.linkonce.lr.*) } 47218822Sdim .rela.lrodata : { *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*) } 48114370Speter .rel.plt : { *(.rel.plt) } 49114370Speter .rela.plt : { *(.rela.plt) } 50114370Speter .init : 5139818Speter { 52114370Speter KEEP (*(.init)) 53114370Speter } =0x90909090 54114370Speter .plt : { *(.plt) } 55114370Speter .text : 56114370Speter { 57114370Speter *(.text .stub .text.* .gnu.linkonce.t.*) 58218822Sdim KEEP (*(.text.*personality*)) 5939818Speter /* .gnu.warning sections are handled specially by elf32.em. */ 6039818Speter *(.gnu.warning) 61114370Speter } =0x90909090 62114370Speter .fini : 63114370Speter { 64114370Speter KEEP (*(.fini)) 65114370Speter } =0x90909090 66114370Speter PROVIDE (__etext = .); 67114370Speter PROVIDE (_etext = .); 6839818Speter PROVIDE (etext = .); 69114370Speter .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 70114370Speter .rodata1 : { *(.rodata1) } 71114370Speter .eh_frame_hdr : { *(.eh_frame_hdr) } 72218822Sdim .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } 73218822Sdim .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } 7439818Speter /* Adjust the address for the data segment. We want to adjust up to 7539818Speter the same address within the page on the next page up. */ 76218822Sdim . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); 77218822Sdim /* Exception handling */ 78218822Sdim .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } 79218822Sdim .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } 80218822Sdim /* Thread Local Storage sections */ 81218822Sdim .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } 82218822Sdim .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } 83218822Sdim .preinit_array : 8439818Speter { 85218822Sdim PROVIDE_HIDDEN (__preinit_array_start = .); 86218822Sdim KEEP (*(.preinit_array)) 87218822Sdim PROVIDE_HIDDEN (__preinit_array_end = .); 8839818Speter } 89218822Sdim .init_array : 90218822Sdim { 91218822Sdim PROVIDE_HIDDEN (__init_array_start = .); 92218822Sdim KEEP (*(SORT(.init_array.*))) 93218822Sdim KEEP (*(.init_array)) 94218822Sdim PROVIDE_HIDDEN (__init_array_end = .); 95218822Sdim } 96218822Sdim .fini_array : 97218822Sdim { 98218822Sdim PROVIDE_HIDDEN (__fini_array_start = .); 99218822Sdim KEEP (*(.fini_array)) 100218822Sdim KEEP (*(SORT(.fini_array.*))) 101218822Sdim PROVIDE_HIDDEN (__fini_array_end = .); 102218822Sdim } 103129824Stjr _start_ctors = .; 104129824Stjr PROVIDE (start_ctors = .); 105114370Speter .ctors : 10639818Speter { 107114370Speter /* gcc uses crtbegin.o to find the start of 108114370Speter the constructors, so we make sure it is 109114370Speter first. Because this is a wildcard, it 110114370Speter doesn't matter if the user does not 111114370Speter actually link against crtbegin.o; the 112114370Speter linker won't look for a file to match a 113114370Speter wildcard. The wildcard also means that it 114114370Speter doesn't matter which directory crtbegin.o 115114370Speter is in. */ 116114370Speter KEEP (*crtbegin.o(.ctors)) 117218822Sdim KEEP (*crtbegin?.o(.ctors)) 118114370Speter /* We don't want to include the .ctor section from 119218822Sdim the crtend.o file until after the sorted ctors. 120114370Speter The .ctor section from the crtend file contains the 121114370Speter end of ctors marker and it must be last */ 122218822Sdim KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) 123114370Speter KEEP (*(SORT(.ctors.*))) 124114370Speter KEEP (*(.ctors)) 12539818Speter } 126129824Stjr _stop_ctors = .; 127129824Stjr PROVIDE (stop_ctors = .); 128114370Speter .dtors : 12939818Speter { 130114370Speter KEEP (*crtbegin.o(.dtors)) 131218822Sdim KEEP (*crtbegin?.o(.dtors)) 132218822Sdim KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) 133114370Speter KEEP (*(SORT(.dtors.*))) 134114370Speter KEEP (*(.dtors)) 13539818Speter } 136114370Speter .jcr : { KEEP (*(.jcr)) } 137218822Sdim .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) } 138218822Sdim .dynamic : { *(.dynamic) } 139218822Sdim .got : { *(.got) } 140218822Sdim . = DATA_SEGMENT_RELRO_END (24, .); 141218822Sdim .got.plt : { *(.got.plt) } 142218822Sdim .data : 143218822Sdim { 144218822Sdim *(.data .data.* .gnu.linkonce.d.*) 145218822Sdim KEEP (*(.gnu.linkonce.d.*personality*)) 146218822Sdim SORT(CONSTRUCTORS) 147218822Sdim } 148218822Sdim .data1 : { *(.data1) } 149218822Sdim _edata = .; PROVIDE (edata = .); 15039818Speter __bss_start = .; 151114370Speter .bss : 15239818Speter { 15339818Speter *(.dynbss) 154114370Speter *(.bss .bss.* .gnu.linkonce.b.*) 15539818Speter *(COMMON) 156114370Speter /* Align here to ensure that the .bss section occupies space up to 157114370Speter _end. Align after .bss to ensure correct alignment even if the 158218822Sdim .bss section disappears because there are no input sections. 159218822Sdim FIXME: Why do we need it? When there is no .bss section, we don't 160218822Sdim pad the .data section. */ 161218822Sdim . = ALIGN(. != 0 ? 64 / 8 : 1); 16239818Speter } 163218822Sdim .lbss : 164218822Sdim { 165218822Sdim *(.dynlbss) 166218822Sdim *(.lbss .lbss.* .gnu.linkonce.lb.*) 167218822Sdim *(LARGE_COMMON) 168218822Sdim } 169114370Speter . = ALIGN(64 / 8); 170218822Sdim .lrodata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : 171218822Sdim { 172218822Sdim *(.lrodata .lrodata.* .gnu.linkonce.lr.*) 173218822Sdim } 174218822Sdim .ldata ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1)) : 175218822Sdim { 176218822Sdim *(.ldata .ldata.* .gnu.linkonce.l.*) 177218822Sdim . = ALIGN(. != 0 ? 64 / 8 : 1); 178218822Sdim } 179218822Sdim . = ALIGN(64 / 8); 180218822Sdim _end = .; PROVIDE (end = .); 181114370Speter . = DATA_SEGMENT_END (.); 18239818Speter /* Stabs debugging sections. */ 183114370Speter .stab 0 : { *(.stab) } 184114370Speter .stabstr 0 : { *(.stabstr) } 185114370Speter .stab.excl 0 : { *(.stab.excl) } 186114370Speter .stab.exclstr 0 : { *(.stab.exclstr) } 187114370Speter .stab.index 0 : { *(.stab.index) } 18839818Speter .stab.indexstr 0 : { *(.stab.indexstr) } 189114370Speter .comment 0 : { *(.comment) } 19039818Speter /* DWARF debug sections. 19139818Speter Symbols in the DWARF debugging sections are relative to the beginning 19239818Speter of the section so we begin them at 0. */ 19339818Speter /* DWARF 1 */ 19439818Speter .debug 0 : { *(.debug) } 19539818Speter .line 0 : { *(.line) } 19639818Speter /* GNU DWARF 1 extensions */ 19739818Speter .debug_srcinfo 0 : { *(.debug_srcinfo) } 19839818Speter .debug_sfnames 0 : { *(.debug_sfnames) } 19939818Speter /* DWARF 1.1 and DWARF 2 */ 20039818Speter .debug_aranges 0 : { *(.debug_aranges) } 20139818Speter .debug_pubnames 0 : { *(.debug_pubnames) } 20239818Speter /* DWARF 2 */ 203114370Speter .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } 20439818Speter .debug_abbrev 0 : { *(.debug_abbrev) } 20539818Speter .debug_line 0 : { *(.debug_line) } 20639818Speter .debug_frame 0 : { *(.debug_frame) } 20739818Speter .debug_str 0 : { *(.debug_str) } 20839818Speter .debug_loc 0 : { *(.debug_loc) } 20939818Speter .debug_macinfo 0 : { *(.debug_macinfo) } 21039818Speter /* SGI/MIPS DWARF 2 extensions */ 21139818Speter .debug_weaknames 0 : { *(.debug_weaknames) } 21239818Speter .debug_funcnames 0 : { *(.debug_funcnames) } 21339818Speter .debug_typenames 0 : { *(.debug_typenames) } 21439818Speter .debug_varnames 0 : { *(.debug_varnames) } 215218822Sdim /* DWARF 3 */ 216218822Sdim .debug_pubtypes 0 : { *(.debug_pubtypes) } 217218822Sdim .debug_ranges 0 : { *(.debug_ranges) } 218218822Sdim .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } 219218822Sdim /DISCARD/ : { *(.note.GNU-stack) } 22039818Speter} 221