155825Speter/* $FreeBSD$ */ 2104930SobrienOUTPUT_FORMAT("elf32-i386-freebsd", "elf32-i386-freebsd", "elf32-i386-freebsd") 339818SpeterOUTPUT_ARCH(i386) 439818SpeterENTRY(btext) 547719SpeterSEARCH_DIR(/usr/lib); 639818SpeterSECTIONS 739818Speter{ 839818Speter /* Read-only sections, merged into text segment: */ 9120654Speter . = kernbase + kernload + SIZEOF_HEADERS; 10218822Sdim .interp : { *(.interp) } 11218822Sdim .hash : { *(.hash) } 12218822Sdim .gnu.hash : { *(.gnu.hash) } 13218822Sdim .dynsym : { *(.dynsym) } 14218822Sdim .dynstr : { *(.dynstr) } 15218822Sdim .gnu.version : { *(.gnu.version) } 16218822Sdim .gnu.version_d : { *(.gnu.version_d) } 17218822Sdim .gnu.version_r : { *(.gnu.version_r) } 18218822Sdim .rel.init : { *(.rel.init) } 19218822Sdim .rela.init : { *(.rela.init) } 20218822Sdim .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } 21218822Sdim .rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) } 22218822Sdim .rel.fini : { *(.rel.fini) } 23218822Sdim .rela.fini : { *(.rela.fini) } 24218822Sdim .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } 25218822Sdim .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.*) } 28218822Sdim .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } 29218822Sdim .rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) } 30218822Sdim .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } 31218822Sdim .rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) } 32218822Sdim .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } 33218822Sdim .rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) } 34218822Sdim .rel.ctors : { *(.rel.ctors) } 35218822Sdim .rela.ctors : { *(.rela.ctors) } 36218822Sdim .rel.dtors : { *(.rel.dtors) } 37218822Sdim .rela.dtors : { *(.rela.dtors) } 38218822Sdim .rel.got : { *(.rel.got) } 39218822Sdim .rela.got : { *(.rela.got) } 40218822Sdim .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } 41218822Sdim .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } 42218822Sdim .rel.plt : { *(.rel.plt) } 43218822Sdim .rela.plt : { *(.rela.plt) } 44218822Sdim .init : 4539818Speter { 46218822Sdim KEEP (*(.init)) 47218822Sdim } =0x90909090 48218822Sdim .plt : { *(.plt) } 49218822Sdim .text : 50218822Sdim { 51218822Sdim *(.text .stub .text.* .gnu.linkonce.t.*) 52218822Sdim KEEP (*(.text.*personality*)) 5339818Speter /* .gnu.warning sections are handled specially by elf32.em. */ 5439818Speter *(.gnu.warning) 55218822Sdim } =0x90909090 56218822Sdim .fini : 57218822Sdim { 58218822Sdim KEEP (*(.fini)) 59218822Sdim } =0x90909090 60218822Sdim PROVIDE (__etext = .); 61218822Sdim PROVIDE (_etext = .); 6239818Speter PROVIDE (etext = .); 63218822Sdim .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } 64218822Sdim .rodata1 : { *(.rodata1) } 65218822Sdim .eh_frame_hdr : { *(.eh_frame_hdr) } 66218822Sdim .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } 67218822Sdim .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } 6839818Speter /* Adjust the address for the data segment. We want to adjust up to 6939818Speter the same address within the page on the next page up. */ 70218822Sdim . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); 71218822Sdim /* Exception handling */ 72218822Sdim .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } 73218822Sdim .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } 74218822Sdim /* Thread Local Storage sections */ 75218822Sdim .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } 76218822Sdim .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } 77218822Sdim .preinit_array : 7839818Speter { 79218822Sdim PROVIDE_HIDDEN (__preinit_array_start = .); 80218822Sdim KEEP (*(.preinit_array)) 81218822Sdim PROVIDE_HIDDEN (__preinit_array_end = .); 8239818Speter } 83218822Sdim .init_array : 84218822Sdim { 85218822Sdim PROVIDE_HIDDEN (__init_array_start = .); 86218822Sdim KEEP (*(SORT(.init_array.*))) 87218822Sdim KEEP (*(.init_array)) 88218822Sdim PROVIDE_HIDDEN (__init_array_end = .); 89218822Sdim } 90218822Sdim .fini_array : 91218822Sdim { 92218822Sdim PROVIDE_HIDDEN (__fini_array_start = .); 93218822Sdim KEEP (*(.fini_array)) 94218822Sdim KEEP (*(SORT(.fini_array.*))) 95218822Sdim PROVIDE_HIDDEN (__fini_array_end = .); 96218822Sdim } 97108777Sphk _start_ctors = .; 98108777Sphk PROVIDE (start_ctors = .); 99218822Sdim .ctors : 10039818Speter { 101218822Sdim /* gcc uses crtbegin.o to find the start of 102218822Sdim the constructors, so we make sure it is 103218822Sdim first. Because this is a wildcard, it 104218822Sdim doesn't matter if the user does not 105218822Sdim actually link against crtbegin.o; the 106218822Sdim linker won't look for a file to match a 107218822Sdim wildcard. The wildcard also means that it 108218822Sdim doesn't matter which directory crtbegin.o 109218822Sdim is in. */ 110218822Sdim KEEP (*crtbegin.o(.ctors)) 111218822Sdim KEEP (*crtbegin?.o(.ctors)) 112218822Sdim /* We don't want to include the .ctor section from 113218822Sdim the crtend.o file until after the sorted ctors. 114218822Sdim The .ctor section from the crtend file contains the 115218822Sdim end of ctors marker and it must be last */ 116218822Sdim KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) 117218822Sdim KEEP (*(SORT(.ctors.*))) 118218822Sdim KEEP (*(.ctors)) 11939818Speter } 120108777Sphk _stop_ctors = .; 121108777Sphk PROVIDE (stop_ctors = .); 122218822Sdim .dtors : 12339818Speter { 124218822Sdim KEEP (*crtbegin.o(.dtors)) 125218822Sdim KEEP (*crtbegin?.o(.dtors)) 126218822Sdim KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) 127218822Sdim KEEP (*(SORT(.dtors.*))) 128218822Sdim KEEP (*(.dtors)) 12939818Speter } 130218822Sdim .jcr : { KEEP (*(.jcr)) } 131218822Sdim .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) } 132218822Sdim .dynamic : { *(.dynamic) } 133218822Sdim .got : { *(.got) } 134218822Sdim . = DATA_SEGMENT_RELRO_END (12, .); 135218822Sdim .got.plt : { *(.got.plt) } 136218822Sdim .data : 137218822Sdim { 138218822Sdim *(.data .data.* .gnu.linkonce.d.*) 139218822Sdim KEEP (*(.gnu.linkonce.d.*personality*)) 140218822Sdim SORT(CONSTRUCTORS) 141218822Sdim } 142218822Sdim .data1 : { *(.data1) } 143218822Sdim _edata = .; PROVIDE (edata = .); 14439818Speter __bss_start = .; 145218822Sdim .bss : 14639818Speter { 14739818Speter *(.dynbss) 148218822Sdim *(.bss .bss.* .gnu.linkonce.b.*) 14939818Speter *(COMMON) 150218822Sdim /* Align here to ensure that the .bss section occupies space up to 151218822Sdim _end. Align after .bss to ensure correct alignment even if the 152218822Sdim .bss section disappears because there are no input sections. 153218822Sdim FIXME: Why do we need it? When there is no .bss section, we don't 154218822Sdim pad the .data section. */ 155218822Sdim . = ALIGN(. != 0 ? 32 / 8 : 1); 15639818Speter } 15739818Speter . = ALIGN(32 / 8); 158218822Sdim . = ALIGN(32 / 8); 159218822Sdim _end = .; PROVIDE (end = .); 160218822Sdim . = DATA_SEGMENT_END (.); 16139818Speter /* Stabs debugging sections. */ 162218822Sdim .stab 0 : { *(.stab) } 163218822Sdim .stabstr 0 : { *(.stabstr) } 164218822Sdim .stab.excl 0 : { *(.stab.excl) } 165218822Sdim .stab.exclstr 0 : { *(.stab.exclstr) } 166218822Sdim .stab.index 0 : { *(.stab.index) } 16739818Speter .stab.indexstr 0 : { *(.stab.indexstr) } 168218822Sdim .comment 0 : { *(.comment) } 16939818Speter /* DWARF debug sections. 17039818Speter Symbols in the DWARF debugging sections are relative to the beginning 17139818Speter of the section so we begin them at 0. */ 17239818Speter /* DWARF 1 */ 17339818Speter .debug 0 : { *(.debug) } 17439818Speter .line 0 : { *(.line) } 17539818Speter /* GNU DWARF 1 extensions */ 17639818Speter .debug_srcinfo 0 : { *(.debug_srcinfo) } 17739818Speter .debug_sfnames 0 : { *(.debug_sfnames) } 17839818Speter /* DWARF 1.1 and DWARF 2 */ 17939818Speter .debug_aranges 0 : { *(.debug_aranges) } 18039818Speter .debug_pubnames 0 : { *(.debug_pubnames) } 18139818Speter /* DWARF 2 */ 182218822Sdim .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } 18339818Speter .debug_abbrev 0 : { *(.debug_abbrev) } 18439818Speter .debug_line 0 : { *(.debug_line) } 18539818Speter .debug_frame 0 : { *(.debug_frame) } 18639818Speter .debug_str 0 : { *(.debug_str) } 18739818Speter .debug_loc 0 : { *(.debug_loc) } 18839818Speter .debug_macinfo 0 : { *(.debug_macinfo) } 18939818Speter /* SGI/MIPS DWARF 2 extensions */ 19039818Speter .debug_weaknames 0 : { *(.debug_weaknames) } 19139818Speter .debug_funcnames 0 : { *(.debug_funcnames) } 19239818Speter .debug_typenames 0 : { *(.debug_typenames) } 19339818Speter .debug_varnames 0 : { *(.debug_varnames) } 194218822Sdim /* DWARF 3 */ 195218822Sdim .debug_pubtypes 0 : { *(.debug_pubtypes) } 196218822Sdim .debug_ranges 0 : { *(.debug_ranges) } 197218822Sdim .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } 198218822Sdim /DISCARD/ : { *(.note.GNU-stack) } 19939818Speter} 200