diff options
Diffstat (limited to 'winsup/cygwin/cygwin.sc.in')
-rw-r--r-- | winsup/cygwin/cygwin.sc.in | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/winsup/cygwin/cygwin.sc.in b/winsup/cygwin/cygwin.sc.in new file mode 100644 index 000000000..694e91697 --- /dev/null +++ b/winsup/cygwin/cygwin.sc.in @@ -0,0 +1,179 @@ +#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) +#ifdef __x86_64__ + *(.text.*) +#endif + *(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$*)) + *(.eh_frame) + *(.rdata_cygwin_nocopy) + } + .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) + } + .rsrc BLOCK(__section_alignment__) : + { + *(.rsrc) + *(SORT(.rsrc$*)) + } + .reloc BLOCK(__section_alignment__) : + { + *(.reloc) + } + .cygwin_dll_common ALIGN(__section_alignment__): + { + *(.cygwin_dll_common) + } + .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 */ + } + .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); + _SYM (_cygheap_start) = ABSOLUTE(.); + } + .cygheap ALIGN(__section_alignment__) : + { +#ifdef __x86_64__ + . = . + (3072 * 1024); +#else + . = . + (2048 * 1024); +#endif + . = ALIGN(0x10000); + _SYM (_cygheap_end) = ABSOLUTE(.); + } + /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.*) } +} |