]> CyberLeo.Net >> Repos - FreeBSD/releng/8.1.git/blob - contrib/binutils/ld/scripttempl/pe.sc
Copy stable/8 to releng/8.1 in preparation for 8.1-RC1.
[FreeBSD/releng/8.1.git] / contrib / binutils / ld / scripttempl / pe.sc
1 # Linker script for PE.
2
3 if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then
4   RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
5 fi
6
7 # We can't easily and portably get an unquoted $ in a shell
8 # substitution, so we do this instead.
9 # Sorting of the .foo$* sections is required by the definition of
10 # grouped sections in PE.
11 # Sorting of the file names in R_IDATA is required by the
12 # current implementation of dlltool (this could probably be changed to
13 # use grouped sections instead).
14 if test "${RELOCATING}"; then
15   R_TEXT='*(SORT(.text$*))'
16   R_DATA='*(SORT(.data$*))'
17   R_RDATA='*(SORT(.rdata$*))'
18   R_IDATA='
19     SORT(*)(.idata$2)
20     SORT(*)(.idata$3)
21     /* These zeroes mark the end of the import list.  */
22     LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
23     SORT(*)(.idata$4)
24     SORT(*)(.idata$5)
25     SORT(*)(.idata$6)
26     SORT(*)(.idata$7)'
27   R_CRT='*(SORT(.CRT$*))'
28   R_TLS='
29     *(.tls)
30     *(.tls$)
31     *(SORT(.tls$*))'
32   R_RSRC='*(SORT(.rsrc$*))'
33 else
34   R_TEXT=
35   R_DATA=
36   R_RDATA=
37   R_IDATA=
38   R_CRT=
39   R_RSRC=
40 fi
41
42 cat <<EOF
43 ${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})}
44 ${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})}
45 ${OUTPUT_ARCH+OUTPUT_ARCH(${OUTPUT_ARCH})}
46
47 ${LIB_SEARCH_DIRS}
48
49 ENTRY(${ENTRY})
50
51 SECTIONS
52 {
53   .text ${RELOCATING+ __image_base__ + __section_alignment__ } : 
54   {
55     ${RELOCATING+ *(.init)}
56     *(.text)
57     ${R_TEXT}
58     *(.glue_7t)
59     *(.glue_7)
60     ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ; 
61                         LONG (-1); *(SORT(.ctors.*)); *(.ctors); *(.ctor); LONG (0); }
62     ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ; 
63                         LONG (-1); *(SORT(.dtors.*)); *(.dtors); *(.dtor);  LONG (0); }
64     ${RELOCATING+ *(.fini)}
65     /* ??? Why is .gcc_exc here?  */
66     ${RELOCATING+ *(.gcc_exc)}
67     ${RELOCATING+PROVIDE (etext = .);}
68     *(.gcc_except_table)
69   }
70
71   /* The Cygwin32 library uses a section to avoid copying certain data
72      on fork.  This used to be named ".data$nocopy".  The linker used
73      to include this between __data_start__ and __data_end__, but that
74      breaks building the cygwin32 dll.  Instead, we name the section
75      ".data_cygwin_nocopy" and explictly include it after __data_end__. */
76
77   .data ${RELOCATING+BLOCK(__section_alignment__)} : 
78   {
79     ${RELOCATING+__data_start__ = . ;}
80     *(.data)
81     *(.data2)
82     ${R_DATA}
83     ${RELOCATING+__data_end__ = . ;}
84     ${RELOCATING+*(.data_cygwin_nocopy)}
85   }
86
87   .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
88   {
89     *(.rdata)
90     ${R_RDATA}
91     *(.eh_frame)
92     ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST__ = .;}
93     ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST__ = .;}
94     *(.rdata_runtime_pseudo_reloc)
95     ${RELOCATING+___RUNTIME_PSEUDO_RELOC_LIST_END__ = .;}
96     ${RELOCATING+__RUNTIME_PSEUDO_RELOC_LIST_END__ = .;}
97   }
98
99   .pdata ${RELOCATING+BLOCK(__section_alignment__)} :
100   {
101     *(.pdata)
102   }
103
104   .bss ${RELOCATING+BLOCK(__section_alignment__)} :
105   {
106     ${RELOCATING+__bss_start__ = . ;}
107     *(.bss)
108     *(COMMON)
109     ${RELOCATING+__bss_end__ = . ;}
110   }
111
112   .edata ${RELOCATING+BLOCK(__section_alignment__)} :
113   {
114     *(.edata)
115   }
116
117   /DISCARD/ :
118   {
119     *(.debug\$S)
120     *(.debug\$T)
121     *(.debug\$F)
122     *(.drectve)
123   }
124
125   .idata ${RELOCATING+BLOCK(__section_alignment__)} :
126   {
127     /* This cannot currently be handled with grouped sections.
128         See pe.em:sort_sections.  */
129     ${R_IDATA}
130   }
131   .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
132   {                                     
133     ${R_CRT}
134   }
135
136   .tls ${RELOCATING+BLOCK(__section_alignment__)} :
137   {                                     
138     ${R_TLS}
139   }
140
141   .endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
142   {
143     /* end is deprecated, don't use it */
144     ${RELOCATING+PROVIDE (end = .);}
145     ${RELOCATING+PROVIDE ( _end = .);}
146     ${RELOCATING+ __end__ = .;}
147   }
148
149   .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
150   {                                     
151     *(.rsrc)
152     ${R_RSRC}
153   }
154
155   .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
156   {                                     
157     *(.reloc)
158   }
159
160   .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
161   {
162     [ .stab ]
163   }
164
165   .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
166   {
167     [ .stabstr ]
168   }
169
170 }
171 EOF