|
|
1.1 ! root 1: /* Default linker script, for normal executables */ ! 2: OUTPUT_FORMAT("elf32-i386", "elf32-i386", ! 3: "elf32-i386") ! 4: OUTPUT_ARCH(i386) ! 5: ENTRY(_start) ! 6: SECTIONS ! 7: { ! 8: /* ! 9: * There are specific requirements about entry points, so we have it ! 10: * configurable via `_START': `.text' will begin there and `.text.start' will ! 11: * be first in there. See also `i386/i386at/boothdr.S' and ! 12: * `gnumach_LINKFLAGS' in `i386/Makefrag.am'. ! 13: */ ! 14: . = _START; ! 15: .text : ! 16: AT (_START_MAP) ! 17: { ! 18: *(.text.start) ! 19: *(.text .stub .text.* .gnu.linkonce.t.*) ! 20: *(.text.unlikely .text.*_unlikely) ! 21: KEEP (*(.text.*personality*)) ! 22: /* .gnu.warning sections are handled specially by elf32.em. */ ! 23: *(.gnu.warning) ! 24: } =0x90909090 ! 25: .init : ! 26: { ! 27: KEEP (*(.init)) ! 28: } =0x90909090 ! 29: .fini : ! 30: { ! 31: KEEP (*(.fini)) ! 32: } =0x90909090 ! 33: PROVIDE (__etext = .); ! 34: PROVIDE (_etext = .); ! 35: PROVIDE (etext = .); ! 36: ! 37: /* Read-only sections, merged into text segment: */ ! 38: PROVIDE (__executable_start = .); ! 39: .interp : { *(.interp) } ! 40: .note.gnu.build-id : { *(.note.gnu.build-id) } ! 41: .hash : { *(.hash) } ! 42: .gnu.hash : { *(.gnu.hash) } ! 43: .dynsym : { *(.dynsym) } ! 44: .dynstr : { *(.dynstr) } ! 45: .gnu.version : { *(.gnu.version) } ! 46: .gnu.version_d : { *(.gnu.version_d) } ! 47: .gnu.version_r : { *(.gnu.version_r) } ! 48: .rel.init : { *(.rel.init) } ! 49: .rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) } ! 50: .rel.fini : { *(.rel.fini) } ! 51: .rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) } ! 52: .rel.data.rel.ro : { *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*) } ! 53: .rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) } ! 54: .rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) } ! 55: .rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) } ! 56: .rel.ctors : { *(.rel.ctors) } ! 57: .rel.dtors : { *(.rel.dtors) } ! 58: .rel.got : { *(.rel.got) } ! 59: .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } ! 60: .rel.ifunc : { *(.rel.ifunc) } ! 61: .rel.plt : ! 62: { ! 63: *(.rel.plt) ! 64: PROVIDE_HIDDEN (__rel_iplt_start = .); ! 65: *(.rel.iplt) ! 66: PROVIDE_HIDDEN (__rel_iplt_end = .); ! 67: } ! 68: .plt : { *(.plt) *(.iplt) } ! 69: .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } ! 70: .rodata1 : { *(.rodata1) } ! 71: .eh_frame_hdr : { *(.eh_frame_hdr) } ! 72: .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) } ! 73: .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table ! 74: .gcc_except_table.*) } ! 75: /* Adjust the address for the data segment. We want to adjust up to ! 76: the same address within the page on the next page up. */ ! 77: . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); ! 78: /* Exception handling */ ! 79: .eh_frame : ONLY_IF_RW { KEEP (*(.eh_frame)) } ! 80: .gcc_except_table : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) } ! 81: /* Thread Local Storage sections */ ! 82: .tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) } ! 83: .tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) } ! 84: .preinit_array : ! 85: { ! 86: PROVIDE_HIDDEN (__preinit_array_start = .); ! 87: KEEP (*(.preinit_array)) ! 88: PROVIDE_HIDDEN (__preinit_array_end = .); ! 89: } ! 90: .init_array : ! 91: { ! 92: PROVIDE_HIDDEN (__init_array_start = .); ! 93: KEEP (*(SORT(.init_array.*))) ! 94: KEEP (*(.init_array)) ! 95: PROVIDE_HIDDEN (__init_array_end = .); ! 96: } ! 97: .fini_array : ! 98: { ! 99: PROVIDE_HIDDEN (__fini_array_start = .); ! 100: KEEP (*(SORT(.fini_array.*))) ! 101: KEEP (*(.fini_array)) ! 102: PROVIDE_HIDDEN (__fini_array_end = .); ! 103: } ! 104: .ctors : ! 105: { ! 106: /* gcc uses crtbegin.o to find the start of ! 107: the constructors, so we make sure it is ! 108: first. Because this is a wildcard, it ! 109: doesn't matter if the user does not ! 110: actually link against crtbegin.o; the ! 111: linker won't look for a file to match a ! 112: wildcard. The wildcard also means that it ! 113: doesn't matter which directory crtbegin.o ! 114: is in. */ ! 115: KEEP (*crtbegin.o(.ctors)) ! 116: KEEP (*crtbegin?.o(.ctors)) ! 117: /* We don't want to include the .ctor section from ! 118: the crtend.o file until after the sorted ctors. ! 119: The .ctor section from the crtend file contains the ! 120: end of ctors marker and it must be last */ ! 121: KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) ! 122: KEEP (*(SORT(.ctors.*))) ! 123: KEEP (*(.ctors)) ! 124: } ! 125: .dtors : ! 126: { ! 127: KEEP (*crtbegin.o(.dtors)) ! 128: KEEP (*crtbegin?.o(.dtors)) ! 129: KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) ! 130: KEEP (*(SORT(.dtors.*))) ! 131: KEEP (*(.dtors)) ! 132: } ! 133: .jcr : { KEEP (*(.jcr)) } ! 134: .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) } ! 135: .dynamic : { *(.dynamic) } ! 136: .got : { *(.got) *(.igot) } ! 137: . = DATA_SEGMENT_RELRO_END (12, .); ! 138: .got.plt : { *(.got.plt) *(.igot.plt) } ! 139: .data : ! 140: { ! 141: *(.data .data.* .gnu.linkonce.d.*) ! 142: SORT(CONSTRUCTORS) ! 143: } ! 144: .data1 : { *(.data1) } ! 145: _edata = .; PROVIDE (edata = .); ! 146: __bss_start = .; ! 147: .bss : ! 148: { ! 149: *(.dynbss) ! 150: *(.bss .bss.* .gnu.linkonce.b.*) ! 151: *(COMMON) ! 152: /* Align here to ensure that the .bss section occupies space up to ! 153: _end. Align after .bss to ensure correct alignment even if the ! 154: .bss section disappears because there are no input sections. ! 155: FIXME: Why do we need it? When there is no .bss section, we don't ! 156: pad the .data section. */ ! 157: . = ALIGN(. != 0 ? 32 / 8 : 1); ! 158: } ! 159: . = ALIGN(32 / 8); ! 160: . = ALIGN(32 / 8); ! 161: _end = .; PROVIDE (end = .); ! 162: . = DATA_SEGMENT_END (.); ! 163: /* Stabs debugging sections. */ ! 164: .stab 0 : { *(.stab) } ! 165: .stabstr 0 : { *(.stabstr) } ! 166: .stab.excl 0 : { *(.stab.excl) } ! 167: .stab.exclstr 0 : { *(.stab.exclstr) } ! 168: .stab.index 0 : { *(.stab.index) } ! 169: .stab.indexstr 0 : { *(.stab.indexstr) } ! 170: .comment 0 : { *(.comment) } ! 171: /* DWARF debug sections. ! 172: Symbols in the DWARF debugging sections are relative to the beginning ! 173: of the section so we begin them at 0. */ ! 174: /* DWARF 1 */ ! 175: .debug 0 : { *(.debug) } ! 176: .line 0 : { *(.line) } ! 177: /* GNU DWARF 1 extensions */ ! 178: .debug_srcinfo 0 : { *(.debug_srcinfo) } ! 179: .debug_sfnames 0 : { *(.debug_sfnames) } ! 180: /* DWARF 1.1 and DWARF 2 */ ! 181: .debug_aranges 0 : { *(.debug_aranges) } ! 182: .debug_pubnames 0 : { *(.debug_pubnames) } ! 183: /* DWARF 2 */ ! 184: .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } ! 185: .debug_abbrev 0 : { *(.debug_abbrev) } ! 186: .debug_line 0 : { *(.debug_line) } ! 187: .debug_frame 0 : { *(.debug_frame) } ! 188: .debug_str 0 : { *(.debug_str) } ! 189: .debug_loc 0 : { *(.debug_loc) } ! 190: .debug_macinfo 0 : { *(.debug_macinfo) } ! 191: /* SGI/MIPS DWARF 2 extensions */ ! 192: .debug_weaknames 0 : { *(.debug_weaknames) } ! 193: .debug_funcnames 0 : { *(.debug_funcnames) } ! 194: .debug_typenames 0 : { *(.debug_typenames) } ! 195: .debug_varnames 0 : { *(.debug_varnames) } ! 196: /* DWARF 3 */ ! 197: .debug_pubtypes 0 : { *(.debug_pubtypes) } ! 198: .debug_ranges 0 : { *(.debug_ranges) } ! 199: .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } ! 200: /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } ! 201: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.