bfd/
[binutils.git] / ld / scripttempl / i386beos.sc
blob21a01e56cdc1a9fe05de6fd0b1aebc282d1d8608
1 # Linker script for PE.
3 if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then
4   RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
5 fi
7 # We can't easily and portably get an unquoted $ in a shell
8 # substitution, so we do this instead.
9 if test "${RELOCATING}"; then
10   R_TEXT='*(.text$*)'
11   R_DATA='*(.data$*)'
12   R_RDATA='*(.rdata$*)'
13   R_IDATA='
14     *(.idata$2)
15     *(.idata$3)
16     /* These zeroes mark the end of the import list.  */
17     LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
18     *(.idata$4)
19     *(.idata$5)
20     *(.idata$6)
21     *(.idata$7)'
22   R_CRT='*(.CRT$*)'
23   R_RSRC='*(.rsrc$*)'
24   R_EXC='*(.exc$*)'
25 else
26   R_TEXT=
27   R_DATA=
28   R_RDATA=
29   R_IDATA=
30   R_CRT=
31   R_RSRC=
32   R_EXC=
35 cat <<EOF
36 ${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})}
37 ${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})}
39 ${LIB_SEARCH_DIRS}
41 ENTRY(__start)
42 ${RELOCATING+header = .;}
43 ${RELOCATING+__fltused = .; /* set up floating pt for MS .obj\'s */}
44 ${RELOCATING+__ldused = .;}
45 SECTIONS
47   .text ${RELOCATING+ __image_base__ + __section_alignment__ } : 
48   {
49     ${RELOCATING+ __text_start__ = . ;}
50     ${RELOCATING+ *(.init)}
51     *(.text)
52     ${R_TEXT}
53     *(.glue_7t)
54     *(.glue_7)
55     ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; 
56                         LONG (-1); *(.ctors); *(.ctor); LONG (0); }
57     ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; 
58                         LONG (-1); *(.dtors); *(.dtor);  LONG (0); }
59     ${RELOCATING+ *(.fini)}
60     /* ??? Why is .gcc_exc here?  */
61     ${RELOCATING+ *(.gcc_exc)}
62     ${RELOCATING+ etext = .;}
63     ${RELOCATING+ __text_end__ = .;}
64     *(.gcc_except_table)
65   }
67   /* The Cygwin32 library uses a section to avoid copying certain data
68      on fork.  This used to be named ".data$nocopy".  The linker used
69      to include this between __data_start__ and __data_end__, but that
70      breaks building the cygwin32 dll.  Instead, we name the section
71      ".data_cygwin_nocopy" and explictly include it after __data_end__. */
73   .data ${RELOCATING+BLOCK(__section_alignment__)} : 
74   {
75     ${RELOCATING+__data_start__ = . ;}
76     *(.data)
77     *(.data2)
78     ${R_DATA}
79     ${RELOCATING+__data_end__ = . ;}
80     ${RELOCATING+*(.data_cygwin_nocopy)}
81   }
83   .bss ${RELOCATING+BLOCK(__section_alignment__)} :
84   {
85     ${RELOCATING+__bss_start__ = . ;}
86     *(.bss)
87     *(COMMON)
88     /* link.exe apparently pulls in .obj's because of UNDEF common
89         symbols, which is not the coff way, but that's MS for you. */
90     *(.CRT\$XCA)
91     *(.CRT\$XCZ)
92     *(.CRT\$XIA)
93     *(.CRT\$XIZ)
94     ${RELOCATING+__bss_end__ = . ;}
95   }
97   .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
98   {
99     *(.rdata)
100     ${R_RDATA}
101     *(.eh_frame)
102   }
104   .edata ${RELOCATING+BLOCK(__section_alignment__)} :
105   {
106     *(.edata)
107   }
109   /DISCARD/ :
110   {
111     *(.debug\$S)
112     *(.debug\$T)
113     *(.debug\$F)
114     *(.drectve)
115     *(.debug*)
116   }
118   .idata ${RELOCATING+BLOCK(__section_alignment__)} :
119   {
120     /* This cannot currently be handled with grouped sections.
121         See pe.em:sort_sections.  */
122     ${R_IDATA}
123   }
124   .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
125   {                                     
126     ${R_CRT}
127   }
129   .endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
130   {
131     /* end is deprecated, don't use it */
132     ${RELOCATING+ end = .;}
133     ${RELOCATING+ _end = .;}
134     ${RELOCATING+ __end__ = .;}
135   }
137   .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
138   {                                     
139     *(.reloc)
140   }
142   .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
143   {                                     
144     *(.rsrc)
145     ${R_RSRC}
146   }
148   .exc ${RELOCATING+BLOCK(__section_alignment__)} :
149   {                                     
150     *(.exc)
151     ${R_EXC}
152   }
154   .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
155   {
156     [ .stab ]
157   }
159   .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
160   {
161     [ .stabstr ]
162   }
163   /* DWARF debug sections.
164      Symbols in the DWARF debugging sections are relative to the beginning
165      of the section so we begin them at 0.  */
167   /* DWARF 1 */
168   .debug          0 ${RELOCATING+(NOLOAD)} : { *(.debug) }
169   .line           0 ${RELOCATING+(NOLOAD)} : { *(.line) }
171   /* GNU DWARF 1 extensions */
172   .debug_srcinfo  0 ${RELOCATING+(NOLOAD)} : { *(.debug_srcinfo) }
173   .debug_sfnames  0 ${RELOCATING+(NOLOAD)} : { *(.debug_sfnames) }
175   /* DWARF 1.1 and DWARF 2 */
176   .debug_aranges  0 ${RELOCATING+(NOLOAD)} : { *(.debug_aranges) }
177   .debug_pubnames 0 ${RELOCATING+(NOLOAD)} : { *(.debug_pubnames) }
179   /* DWARF 2 */
180   .debug_info     0 ${RELOCATING+(NOLOAD)} : { *(.debug_info) *(.gnu.linkonce.wi.*) }
181   .debug_abbrev   0 ${RELOCATING+(NOLOAD)} : { *(.debug_abbrev) }
182   .debug_line     0 ${RELOCATING+(NOLOAD)} : { *(.debug_line) }
183   .debug_frame    0 ${RELOCATING+(NOLOAD)} : { *(.debug_frame) }
184   .debug_str      0 ${RELOCATING+(NOLOAD)} : { *(.debug_str) }
185   .debug_loc      0 ${RELOCATING+(NOLOAD)} : { *(.debug_loc) }
186   .debug_macinfo  0 ${RELOCATING+(NOLOAD)} : { *(.debug_macinfo) }
188   /* SGI/MIPS DWARF 2 extensions */
189   .debug_weaknames 0 ${RELOCATING+(NOLOAD)} : { *(.debug_weaknames) }
190   .debug_funcnames 0 ${RELOCATING+(NOLOAD)} : { *(.debug_funcnames) }
191   .debug_typenames 0 ${RELOCATING+(NOLOAD)} : { *(.debug_typenames) }
192   .debug_varnames  0 ${RELOCATING+(NOLOAD)} : { *(.debug_varnames) }