xref: /netbsd-src/external/gpl3/binutils.old/dist/ld/scripttempl/mcorepe.sc (revision 92e958de60c71aa0f2452bd7074cbb006fe6546b)
1# Linker script for MCore PE.
2
3if test -z "${RELOCATEABLE_OUTPUT_FORMAT}"; then
4  RELOCATEABLE_OUTPUT_FORMAT=${OUTPUT_FORMAT}
5fi
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).
14if 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_RSRC='*(SORT(.rsrc$*))'
29else
30  R_TEXT=
31  R_DATA=
32  R_RDATA=
33  R_IDATA=
34  R_CRT=
35  R_RSRC=
36fi
37
38if test "$RELOCATING"; then
39  # Can't use ${RELOCATING+blah "blah" blah} for this,
40  # because bash 2.x will lose the doublequotes.
41  cat <<EOF
42OUTPUT_FORMAT("${OUTPUT_FORMAT}", "${BIG_OUTPUT_FORMAT}",
43	  	           "${LITTLE_OUTPUT_FORMAT}")
44EOF
45fi
46
47cat <<EOF
48${LIB_SEARCH_DIRS}
49
50${RELOCATING+ENTRY (_mainCRTStartup)}
51
52SECTIONS
53{
54  .text ${RELOCATING+ __image_base__ + __section_alignment__ } :
55  {
56    ${RELOCATING+ *(.init)}
57    *(.text)
58    ${R_TEXT}
59    ${RELOCATING+ *(.text.*)}
60    *(.glue_7t)
61    *(.glue_7)
62    ${CONSTRUCTING+ ___CTOR_LIST__ = .; __CTOR_LIST__ = . ;
63			LONG (-1); *(.ctors); *(.ctor); LONG (0); }
64    ${CONSTRUCTING+ ___DTOR_LIST__ = .; __DTOR_LIST__ = . ;
65			LONG (-1); *(.dtors); *(.dtor);  LONG (0); }
66    ${RELOCATING+ *(.fini)}
67    /* ??? Why is .gcc_exc here?  */
68    ${RELOCATING+ *(.gcc_exc)}
69    ${RELOCATING+ etext = .;}
70    *(.gcc_except_table)
71  }
72
73  /* The Cygwin32 library uses a section to avoid copying certain data
74     on fork.  This used to be named ".data$nocopy".  The linker used
75     to include this between __data_start__ and __data_end__, but that
76     breaks building the cygwin32 dll.  Instead, we name the section
77     ".data_cygwin_nocopy" and explicitly include it after __data_end__. */
78
79  .data ${RELOCATING+BLOCK(__section_alignment__)} :
80  {
81    ${RELOCATING+__data_start__ = . ;}
82    *(.data)
83    *(.data2)
84    ${R_DATA}
85    ${RELOCATING+__data_end__ = . ;}
86    ${RELOCATING+*(.data_cygwin_nocopy)}
87  }
88
89  .bss ${RELOCATING+BLOCK(__section_alignment__)} :
90  {
91    ${RELOCATING+__bss_start__ = . ;}
92    *(.bss)
93    *(COMMON)
94    ${RELOCATING+__bss_end__ = . ;}
95  }
96
97  .rdata ${RELOCATING+BLOCK(__section_alignment__)} :
98  {
99    *(.rdata)
100    ${R_RDATA}
101    *(.eh_frame)
102  }
103
104  .edata ${RELOCATING+BLOCK(__section_alignment__)} :
105  {
106    *(.edata)
107  }
108
109  /DISCARD/ :
110  {
111    *(.debug\$S)
112    *(.debug\$T)
113    *(.debug\$F)
114    *(.drectve)
115  }
116
117  .idata ${RELOCATING+BLOCK(__section_alignment__)} :
118  {
119    /* This cannot currently be handled with grouped sections.
120	See pe.em:sort_sections.  */
121    ${R_IDATA}
122  }
123  .CRT ${RELOCATING+BLOCK(__section_alignment__)} :
124  {
125    ${R_CRT}
126  }
127
128  .endjunk ${RELOCATING+BLOCK(__section_alignment__)} :
129  {
130    /* end is deprecated, don't use it */
131    ${RELOCATING+ end = .;}
132    ${RELOCATING+ _end = .;}
133    ${RELOCATING+ __end__ = .;}
134  }
135
136  .reloc ${RELOCATING+BLOCK(__section_alignment__)} :
137  {
138    *(.reloc)
139  }
140
141  .rsrc ${RELOCATING+BLOCK(__section_alignment__)} :
142  {
143    *(.rsrc)
144    ${R_RSRC}
145  }
146
147  .stab ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
148  {
149    [ .stab ]
150  }
151
152  .stabstr ${RELOCATING+BLOCK(__section_alignment__)} ${RELOCATING+(NOLOAD)} :
153  {
154    [ .stabstr ]
155  }
156
157  .stack 0x80000 :
158  {
159    _stack = .;
160    *(.stack)
161  }
162}
163EOF
164