ldscript.amd64 revision 114370
155825Speter/* $FreeBSD: head/sys/conf/ldscript.amd64 114370 2003-05-01 02:59:24Z peter $ */ 2114370SpeterOUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") 3114370SpeterOUTPUT_ARCH(i386:x86-64) 439818SpeterENTRY(btext) 5114370SpeterSEARCH_DIR("/usr/lib"); 639818SpeterSECTIONS 739818Speter{ 839818Speter /* Read-only sections, merged into text segment: */ 983598Speter . = kernbase + 0x00100000 + SIZEOF_HEADERS; 10114370Speter .interp : { *(.interp) } 11114370Speter .hash : { *(.hash) } 12114370Speter .dynsym : { *(.dynsym) } 13114370Speter .dynstr : { *(.dynstr) } 14114370Speter .gnu.version : { *(.gnu.version) } 15114370Speter .gnu.version_d : { *(.gnu.version_d) } 16114370Speter .gnu.version_r : { *(.gnu.version_r) } 17114370Speter .rel.init : { *(.rel.init) } 18114370Speter .rela.init : { *(.rela.init) } 19114370Speter .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } 20114370Speter .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } 21114370Speter .rel.fini : { *(.rel.fini) } 22114370Speter .rela.fini : { *(.rela.fini) } 23114370Speter .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } 24114370Speter .rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) } 25114370Speter .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } 26114370Speter .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } 27114370Speter .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } 28114370Speter .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } 29114370Speter .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } 30114370Speter .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } 31114370Speter .rel.ctors : { *(.rel.ctors) } 32114370Speter .rela.ctors : { *(.rela.ctors) } 33114370Speter .rel.dtors : { *(.rel.dtors) } 34114370Speter .rela.dtors : { *(.rela.dtors) } 35114370Speter .rel.got : { *(.rel.got) } 36114370Speter .rela.got : { *(.rela.got) } 37114370Speter .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } 38114370Speter .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } 39114370Speter .rel.plt : { *(.rel.plt) } 40114370Speter .rela.plt : { *(.rela.plt) } 41114370Speter .init : 4239818Speter { 43114370Speter KEEP (*(.init)) 44114370Speter } =0x90909090 45114370Speter .plt : { *(.plt) } 46114370Speter .text : 47114370Speter { 48114370Speter *(.text .stub .text.* .gnu.linkonce.t.*) 4939818Speter /* .gnu.warning sections are handled specially by elf32.em. */ 5039818Speter *(.gnu.warning) 51114370Speter } =0x90909090 52114370Speter .fini : 53114370Speter { 54114370Speter KEEP (*(.fini)) 55114370Speter } =0x90909090 56114370Speter PROVIDE (__etext = .); 57114370Speter PROVIDE (_etext = .); 5839818Speter PROVIDE (etext = .); 59114370Speter .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 60114370Speter .rodata1 : { *(.rodata1) } 61114370Speter .eh_frame_hdr : { *(.eh_frame_hdr) } 6239818Speter /* Adjust the address for the data segment. We want to adjust up to 6339818Speter the same address within the page on the next page up. */ 64114370Speter . = DATA_SEGMENT_ALIGN(0x100000, 0x1000); 65114370Speter /* Ensure the __preinit_array_start label is properly aligned. We 66114370Speter could instead move the label definition inside the section, but 67114370Speter the linker would then create the section even if it turns out to 68114370Speter be empty, which isn't pretty. */ 69114370Speter . = ALIGN(64 / 8); 70114370Speter PROVIDE (__preinit_array_start = .); 71114370Speter .preinit_array : { *(.preinit_array) } 72114370Speter PROVIDE (__preinit_array_end = .); 73114370Speter PROVIDE (__init_array_start = .); 74114370Speter .init_array : { *(.init_array) } 75114370Speter PROVIDE (__init_array_end = .); 76114370Speter PROVIDE (__fini_array_start = .); 77114370Speter .fini_array : { *(.fini_array) } 78114370Speter PROVIDE (__fini_array_end = .); 79114370Speter .data : 8039818Speter { 81114370Speter *(.data .data.* .gnu.linkonce.d.*) 82114370Speter SORT(CONSTRUCTORS) 8339818Speter } 84114370Speter .data1 : { *(.data1) } 85114370Speter .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } 86114370Speter .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } 87114370Speter .eh_frame : { KEEP (*(.eh_frame)) } 88114370Speter .gcc_except_table : { *(.gcc_except_table) } 89114370Speter .dynamic : { *(.dynamic) } 90114370Speter .ctors : 9139818Speter { 92114370Speter /* gcc uses crtbegin.o to find the start of 93114370Speter the constructors, so we make sure it is 94114370Speter first. Because this is a wildcard, it 95114370Speter doesn't matter if the user does not 96114370Speter actually link against crtbegin.o; the 97114370Speter linker won't look for a file to match a 98114370Speter wildcard. The wildcard also means that it 99114370Speter doesn't matter which directory crtbegin.o 100114370Speter is in. */ 101114370Speter KEEP (*crtbegin.o(.ctors)) 102114370Speter /* We don't want to include the .ctor section from 103114370Speter from the crtend.o file until after the sorted ctors. 104114370Speter The .ctor section from the crtend file contains the 105114370Speter end of ctors marker and it must be last */ 106114370Speter KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors)) 107114370Speter KEEP (*(SORT(.ctors.*))) 108114370Speter KEEP (*(.ctors)) 10939818Speter } 110114370Speter .dtors : 11139818Speter { 112114370Speter KEEP (*crtbegin.o(.dtors)) 113114370Speter KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors)) 114114370Speter KEEP (*(SORT(.dtors.*))) 115114370Speter KEEP (*(.dtors)) 11639818Speter } 117114370Speter .jcr : { KEEP (*(.jcr)) } 118114370Speter .got : { *(.got.plt) *(.got) } 119114370Speter _edata = .; 12039818Speter PROVIDE (edata = .); 12139818Speter __bss_start = .; 122114370Speter .bss : 12339818Speter { 12439818Speter *(.dynbss) 125114370Speter *(.bss .bss.* .gnu.linkonce.b.*) 12639818Speter *(COMMON) 127114370Speter /* Align here to ensure that the .bss section occupies space up to 128114370Speter _end. Align after .bss to ensure correct alignment even if the 129114370Speter .bss section disappears because there are no input sections. */ 130114370Speter . = ALIGN(64 / 8); 13139818Speter } 132114370Speter . = ALIGN(64 / 8); 133114370Speter _end = .; 13439818Speter PROVIDE (end = .); 135114370Speter . = DATA_SEGMENT_END (.); 13639818Speter /* Stabs debugging sections. */ 137114370Speter .stab 0 : { *(.stab) } 138114370Speter .stabstr 0 : { *(.stabstr) } 139114370Speter .stab.excl 0 : { *(.stab.excl) } 140114370Speter .stab.exclstr 0 : { *(.stab.exclstr) } 141114370Speter .stab.index 0 : { *(.stab.index) } 14239818Speter .stab.indexstr 0 : { *(.stab.indexstr) } 143114370Speter .comment 0 : { *(.comment) } 14439818Speter /* DWARF debug sections. 14539818Speter Symbols in the DWARF debugging sections are relative to the beginning 14639818Speter of the section so we begin them at 0. */ 14739818Speter /* DWARF 1 */ 14839818Speter .debug 0 : { *(.debug) } 14939818Speter .line 0 : { *(.line) } 15039818Speter /* GNU DWARF 1 extensions */ 15139818Speter .debug_srcinfo 0 : { *(.debug_srcinfo) } 15239818Speter .debug_sfnames 0 : { *(.debug_sfnames) } 15339818Speter /* DWARF 1.1 and DWARF 2 */ 15439818Speter .debug_aranges 0 : { *(.debug_aranges) } 15539818Speter .debug_pubnames 0 : { *(.debug_pubnames) } 15639818Speter /* DWARF 2 */ 157114370Speter .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } 15839818Speter .debug_abbrev 0 : { *(.debug_abbrev) } 15939818Speter .debug_line 0 : { *(.debug_line) } 16039818Speter .debug_frame 0 : { *(.debug_frame) } 16139818Speter .debug_str 0 : { *(.debug_str) } 16239818Speter .debug_loc 0 : { *(.debug_loc) } 16339818Speter .debug_macinfo 0 : { *(.debug_macinfo) } 16439818Speter /* SGI/MIPS DWARF 2 extensions */ 16539818Speter .debug_weaknames 0 : { *(.debug_weaknames) } 16639818Speter .debug_funcnames 0 : { *(.debug_funcnames) } 16739818Speter .debug_typenames 0 : { *(.debug_typenames) } 16839818Speter .debug_varnames 0 : { *(.debug_varnames) } 16939818Speter} 170