| #ifdef __x86_64__ |
| OUTPUT_FORMAT(pei-x86-64) |
| SEARCH_DIR("/usr/x86_64-pc-cygwin/lib/w32api"); SEARCH_DIR("=/usr/lib/w32api"); |
| #else |
| #undef i386 |
| OUTPUT_FORMAT(pei-i386) |
| SEARCH_DIR("/usr/i686-pc-cygwin/lib/w32api"); SEARCH_DIR("=/usr/lib/w32api"); |
| #endif |
| #define __CONCAT1(a,b) a##b |
| #define __CONCAT(a,b) __CONCAT1(a,b) |
| #define _SYM(x) __CONCAT(__USER_LABEL_PREFIX__, x) |
| SECTIONS |
| { |
| .text __image_base__ + __section_alignment__ : |
| { |
| *(.init) |
| *(.text) |
| *(.text.*) |
| *(SORT(.text$*)) |
| *(.glue_7t) |
| *(.glue_7) |
| #ifdef __x86_64__ |
| . = ALIGN(8); |
| ___CTOR_LIST__ = .; __CTOR_LIST__ = .; |
| LONG (-1); LONG (-1); *(SORT(.ctors.*)); *(.ctors); *(.ctor); LONG (0); LONG (0); |
| ___DTOR_LIST__ = .; __DTOR_LIST__ = .; |
| LONG (-1); LONG (-1); *(SORT(.dtors.*)); *(.dtors); *(.dtor); LONG (0); LONG (0); |
| #else |
| ___CTOR_LIST__ = .; __CTOR_LIST__ = .; |
| LONG (-1); *(SORT(.ctors.*)); *(.ctors); *(.ctor); LONG (0); |
| ___DTOR_LIST__ = .; __DTOR_LIST__ = .; |
| LONG (-1); *(SORT(.dtors.*)); *(.dtors); *(.dtor); LONG (0); |
| #endif |
| *(.fini) |
| /* ??? Why is .gcc_exc here? */ |
| *(.gcc_exc) |
| etext = .; |
| *(.gcc_except_table) |
| } |
| .autoload_text ALIGN(__section_alignment__) : |
| { |
| *(.*_autoload_text); |
| } |
| /* The Cygwin DLL uses a section to avoid copying certain data |
| on fork. This used to be named ".data$nocopy". The linker used |
| to include this between __data_start__ and __data_end__, but that |
| breaks building the cygwin dll. Instead, we name the section |
| ".data_cygwin_nocopy" and explicitly include it after __data_end__. */ |
| .data ALIGN(__section_alignment__) : |
| { |
| __data_start__ = .; |
| *(.data) |
| *(.data2) |
| *(SORT(.data$*)) |
| __data_end__ = .; |
| *(.data_cygwin_nocopy) |
| } |
| .rdata ALIGN(__section_alignment__) : |
| { |
| *(.rdata) |
| *(SORT(.rdata$*)) |
| *(.rdata_cygwin_nocopy) |
| ___RUNTIME_PSEUDO_RELOC_LIST__ = .; |
| __RUNTIME_PSEUDO_RELOC_LIST__ = .; |
| *(.rdata_runtime_pseudo_reloc) |
| ___RUNTIME_PSEUDO_RELOC_LIST_END__ = .; |
| __RUNTIME_PSEUDO_RELOC_LIST_END__ = .; |
| } |
| .eh_frame ALIGN(__section_alignment__) : |
| { |
| *(.eh_frame*) |
| } |
| .pdata ALIGN(__section_alignment__) : |
| { |
| *(.pdata*) |
| } |
| #ifdef __x86_64__ |
| .xdata ALIGN(__section_alignment__) : |
| { |
| *(.xdata*) |
| } |
| #endif |
| .bss ALIGN(__section_alignment__) : |
| { |
| __bss_start__ = .; |
| *(.bss) |
| *(COMMON) |
| __bss_end__ = .; |
| } |
| .edata ALIGN(__section_alignment__) : |
| { |
| *(.edata) |
| } |
| .reloc BLOCK(__section_alignment__) : |
| { |
| *(.reloc) |
| } |
| .cygwin_dll_common ALIGN(__section_alignment__): |
| { |
| *(.cygwin_dll_common) |
| } |
| .idata ALIGN(__section_alignment__) : |
| { |
| /* This cannot currently be handled with grouped sections. |
| See pe.em:sort_sections. */ |
| SORT(*)(.idata$2) |
| SORT(*)(.idata$3) |
| /* These zeroes mark the end of the import list. */ |
| LONG (0); LONG (0); LONG (0); LONG (0); LONG (0); |
| SORT(*)(.idata$4) |
| SORT(*)(.idata$5) |
| SORT(*)(.idata$6) |
| SORT(*)(.idata$7) |
| . = ALIGN(16); |
| } |
| .gnu_debuglink_overlay ALIGN(__section_alignment__) (NOLOAD): |
| { |
| BYTE(0) /* c */ |
| BYTE(0) /* y */ |
| BYTE(0) /* g */ |
| BYTE(0) /* w */ |
| BYTE(0) /* i */ |
| BYTE(0) /* n */ |
| BYTE(0) /* 1 */ |
| BYTE(0) /* . */ |
| BYTE(0) /* d */ |
| BYTE(0) /* b */ |
| BYTE(0) /* g */ |
| BYTE(0) /* \0 */ |
| LONG(0) /* checksum */ |
| } |
| .rsrc BLOCK(__section_alignment__) : |
| { |
| *(.rsrc) |
| *(SORT(.rsrc$*)) |
| _SYM (_cygheap_start) = .; |
| } |
| .cygheap ALIGN(__section_alignment__) : |
| { |
| #ifdef __x86_64__ |
| . = . + (3072 * 1024); |
| #else |
| . = . + (2048 * 1024); |
| #endif |
| . = ALIGN(0x10000); |
| _SYM (_cygheap_end) = .; |
| } |
| /DISCARD/ : |
| { |
| *(.debug$S) |
| *(.debug$T) |
| *(.debug$F) |
| *(.drectve) |
| } |
| .stab ALIGN(__section_alignment__) (NOLOAD) : |
| { |
| *(.stab) |
| } |
| .stabstr ALIGN(__section_alignment__) (NOLOAD) : |
| { |
| *(.stabstr) |
| } |
| /* DWARF 1.1 and DWARF 2 */ |
| .debug_aranges ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_aranges) } |
| .debug_pubnames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_pubnames) } |
| .debug_pubtypes ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_pubtypes) } |
| /* DWARF 2 */ |
| .debug_info ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_info) } |
| .debug_abbrev ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_abbrev) } |
| .debug_line ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_line) } |
| .debug_frame ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_frame) } |
| .debug_str ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_str) } |
| .debug_loc ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_loc) } |
| .debug_macinfo ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_macinfo) } |
| /* SGI/MIPS DWARF 2 extensions. */ |
| .debug_weaknames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_weaknames) } |
| .debug_funcnames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_funcnames) } |
| .debug_typenames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_typenames) } |
| .debug_varnames ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_varnames) } |
| .debug_macro ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_macro) } |
| /* DWARF 3. */ |
| .debug_ranges ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_ranges) } |
| /* DWARF 4. */ |
| .debug_types ALIGN(__section_alignment__) (NOLOAD) : { *(.debug_types .gnu.linkonce.wt.*) } |
| } |