diff options
author | Marc Espie <espie@cvs.openbsd.org> | 2000-09-12 19:13:03 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 2000-09-12 19:13:03 +0000 |
commit | 1b50fce4c0ed748c156af3ac629e50cb5e4d0ef4 (patch) | |
tree | edee61faabd18b4a5d84e8cdb679d7a8d1fe171f /gnu/usr.bin/binutils/ld/scripttempl/pe.sc | |
parent | 9f1193e30b5f04af9ea81c644eec79b7b535b890 (diff) |
Help stupid cvs fixing basic conflicts.
Diffstat (limited to 'gnu/usr.bin/binutils/ld/scripttempl/pe.sc')
-rw-r--r-- | gnu/usr.bin/binutils/ld/scripttempl/pe.sc | 138 |
1 files changed, 92 insertions, 46 deletions
diff --git a/gnu/usr.bin/binutils/ld/scripttempl/pe.sc b/gnu/usr.bin/binutils/ld/scripttempl/pe.sc index ee3e0c19d05..ce1a502f717 100644 --- a/gnu/usr.bin/binutils/ld/scripttempl/pe.sc +++ b/gnu/usr.bin/binutils/ld/scripttempl/pe.sc @@ -1,10 +1,48 @@ # Linker script for PE. +if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then + RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT} +fi + +# We can't easily and portably get an unquoted $ in a shell +# substitution, so we do this instead. +# Sorting of the .foo$* sections is required by the definition of +# grouped sections in PE. +# Sorting of the file names in R_IDATA is required by the +# current implementation of dlltool (this could probably be changed to +# use grouped sections instead). +if test "${RELOCATING}"; then + R_TEXT='*(SORT(.text$*))' + R_DATA='*(SORT(.data$*))' + R_RDATA='*(SORT(.rdata$*))' + R_IDATA=' + 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)' + R_CRT='*(SORT(.CRT$*))' + R_RSRC='*(SORT(.rsrc$*))' +else + R_TEXT= + R_DATA= + R_RDATA= + R_IDATA= + R_CRT= + R_RSRC= +fi + cat <<EOF -OUTPUT_FORMAT(${OUTPUT_FORMAT}) +${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})} +${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})} +${OUTPUT_ARCH+OUTPUT_ARCH(${OUTPUT_ARCH})} + ${LIB_SEARCH_DIRS} -ENTRY(_mainCRTStartup) +ENTRY(${ENTRY}) SECTIONS { @@ -12,6 +50,9 @@ SECTIONS { ${RELOCATING+ *(.init)} *(.text) + ${R_TEXT} + *(.glue_7t) + *(.glue_7) ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; LONG (-1); *(.ctors); *(.ctor); LONG (0); } ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; @@ -20,43 +61,51 @@ SECTIONS /* ??? Why is .gcc_exc here? */ ${RELOCATING+ *(.gcc_exc)} ${RELOCATING+ etext = .;} - /* Grouped section support currently must be explicitly provided for - in the linker script. */ - *(.text\$) + *(.gcc_except_table) } - .bss BLOCK(__section_alignment__) : - { - __bss_start__ = . ; - *(.bss) - *(COMMON) - __bss_end__ = . ; - } - .data BLOCK(__section_alignment__) : + /* The Cygwin32 library 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 cygwin32 dll. Instead, we name the section + ".data_cygwin_nocopy" and explictly include it after __data_end__. */ + + .data ${RELOCATING+BLOCK(__section_alignment__)} : { - __data_start__ = . ; + ${RELOCATING+__data_start__ = . ;} *(.data) *(.data2) - __data_end__ = . ; - /* Grouped section support currently must be explicitly provided for - in the linker script. */ - *(.data\$) + ${R_DATA} + ${RELOCATING+__data_end__ = . ;} + ${RELOCATING+*(.data_cygwin_nocopy)} } - .rdata BLOCK(__section_alignment__) : + .rdata ${RELOCATING+BLOCK(__section_alignment__)} : { *(.rdata) - /* Grouped section support currently must be explicitly provided for - in the linker script. */ - *(.rdata\$) + ${R_RDATA} + *(.eh_frame) + } + + .pdata ${RELOCATING+BLOCK(__section_alignment__)} : + { + *(.pdata) + } + + .bss ${RELOCATING+BLOCK(__section_alignment__)} : + { + ${RELOCATING+__bss_start__ = . ;} + *(.bss) + *(COMMON) + ${RELOCATING+__bss_end__ = . ;} } - .edata BLOCK(__section_alignment__) : + .edata ${RELOCATING+BLOCK(__section_alignment__)} : { *(.edata) } - /DISCARD/ BLOCK(__section_alignment__) : + /DISCARD/ : { *(.debug\$S) *(.debug\$T) @@ -64,48 +113,45 @@ SECTIONS *(.drectve) } - .idata BLOCK(__section_alignment__) : + .idata ${RELOCATING+BLOCK(__section_alignment__)} : { /* This cannot currently be handled with grouped sections. See pe.em:sort_sections. */ - *(.idata\$2) - *(.idata\$3) - *(.idata\$4) - *(.idata\$5) - *(.idata\$6) - *(.idata\$7) - } - .CRT BLOCK(__section_alignment__) : - { - /* Grouped sections are used to handle .CRT\$foo. */ - *(.CRT\$) + ${R_IDATA} } - .rsrc BLOCK(__section_alignment__) : + .CRT ${RELOCATING+BLOCK(__section_alignment__)} : { - /* Grouped sections are used to handle .rsrc\$0[12]. */ - *(.rsrc\$) + ${R_CRT} } - .endjunk BLOCK(__section_alignment__) : + .endjunk ${RELOCATING+BLOCK(__section_alignment__)} : { /* end is deprecated, don't use it */ ${RELOCATING+ end = .;} + ${RELOCATING+ _end = .;} ${RELOCATING+ __end__ = .;} } - .stab BLOCK(__section_alignment__) ${RELOCATING+(NOLOAD)} : + .rsrc ${RELOCATING+BLOCK(__section_alignment__)} : + { + *(.rsrc) + ${R_RSRC} + } + + .reloc ${RELOCATING+BLOCK(__section_alignment__)} : + { + *(.reloc) + } + + .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : { [ .stab ] } - .stabstr BLOCK(__section_alignment__) ${RELOCATING+(NOLOAD)} : + .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} : { [ .stabstr ] } - .reloc BLOCK(__section_alignment__) : - { - *(.reloc) - } } EOF |