]> rtime.felk.cvut.cz Git - arc.git/blob - arch/hc1x/hcs12d/scripts/linkscript_gcc.ldf
Starting 'hcs12x' branch
[arc.git] / arch / hc1x / hcs12d / scripts / linkscript_gcc.ldf
1 /* Default linker script, for normal executables */\r
2 /* Linker script for 68HC12 executable (PROM).  */\r
3 OUTPUT_FORMAT("elf32-m68hc12", "elf32-m68hc12", "elf32-m68hc12")\r
4 OUTPUT_ARCH(m68hc12)\r
5 ENTRY(_start)\r
6 \r
7 \r
8 MEMORY\r
9 {\r
10 #include "memory.ldf"\r
11 }\r
12 \r
13 /* Setup the stack on the top of the data memory bank.  */\r
14 PROVIDE (_stack = 0x4000);\r
15 \r
16 \r
17 SECTIONS\r
18 {\r
19   .hash          : { *(.hash)           }\r
20   .dynsym        : { *(.dynsym)         }\r
21   .dynstr        : { *(.dynstr)         }\r
22   .gnu.version            : { *(.gnu.version) }\r
23   .gnu.version_d          : { *(.gnu.version_d) }\r
24   .gnu.version_r          : { *(.gnu.version_r) }\r
25   \r
26   /*\r
27   .rel.text      :\r
28     {\r
29       *(.rel.text)\r
30       *(.rel.text.*)\r
31       *(.rel.gnu.linkonce.t.*)\r
32     }\r
33   .rela.text     :\r
34     {\r
35       *(.rela.text)\r
36       *(.rela.text.*)\r
37       *(.rela.gnu.linkonce.t.*)\r
38     }\r
39   .rel.data      :\r
40     {\r
41       *(.rel.data)\r
42       *(.rel.data.*)\r
43       *(.rel.gnu.linkonce.d.*)\r
44     }\r
45   .rela.data     :\r
46     {\r
47       *(.rela.data)\r
48       *(.rela.data.*)\r
49       *(.rela.gnu.linkonce.d.*)\r
50     }\r
51   .rel.rodata    :\r
52     {\r
53       *(.rel.rodata)\r
54       *(.rel.rodata.*)\r
55       *(.rel.gnu.linkonce.r.*)\r
56     }\r
57   .rela.rodata   :\r
58     {\r
59       *(.rela.rodata)\r
60       *(.rela.rodata.*)\r
61       *(.rela.gnu.linkonce.r.*)\r
62     }\r
63   .rel.sdata     :\r
64     {\r
65       *(.rel.sdata)\r
66       *(.rel.sdata.*)\r
67       *(.rel.gnu.linkonce.s.*)\r
68     }\r
69   .rela.sdata     :\r
70     {\r
71       *(.rela.sdata)\r
72       *(.rela.sdata.*)\r
73       *(.rela.gnu.linkonce.s.*)\r
74     }\r
75   .rel.sbss      :\r
76     {\r
77       *(.rel.sbss)\r
78       *(.rel.sbss.*)\r
79       *(.rel.gnu.linkonce.sb.*)\r
80     }\r
81   .rela.sbss     :\r
82     {\r
83       *(.rela.sbss)\r
84       *(.rela.sbss.*)\r
85       *(.rel.gnu.linkonce.sb.*)\r
86     }\r
87   .rel.bss       :\r
88     {\r
89       *(.rel.bss)\r
90       *(.rel.bss.*)\r
91       *(.rel.gnu.linkonce.b.*)\r
92     }\r
93   .rela.bss      :\r
94     {\r
95       *(.rela.bss)\r
96       *(.rela.bss.*)\r
97       *(.rela.gnu.linkonce.b.*)\r
98     }\r
99   .rel.stext              : { *(.rel.stest) }\r
100   .rela.stext             : { *(.rela.stest) }\r
101   .rel.etext              : { *(.rel.etest) }\r
102   .rela.etext             : { *(.rela.etest) }\r
103   .rel.sdata              : { *(.rel.sdata) }\r
104   .rela.sdata             : { *(.rela.sdata) }\r
105   .rel.edata              : { *(.rel.edata) }\r
106   .rela.edata             : { *(.rela.edata) }\r
107   .rel.eit_v              : { *(.rel.eit_v) }\r
108   .rela.eit_v             : { *(.rela.eit_v) }\r
109   .rel.ebss               : { *(.rel.ebss) }\r
110   .rela.ebss              : { *(.rela.ebss) }\r
111   .rel.srodata            : { *(.rel.srodata) }\r
112   .rela.srodata           : { *(.rela.srodata) }\r
113   .rel.erodata            : { *(.rel.erodata) }\r
114   .rela.erodata           : { *(.rela.erodata) }\r
115   .rel.got                : { *(.rel.got) }\r
116   .rela.got               : { *(.rela.got) }\r
117   .rel.ctors              : { *(.rel.ctors) }\r
118   .rela.ctors             : { *(.rela.ctors) }\r
119   .rel.dtors              : { *(.rel.dtors) }\r
120   .rela.dtors             : { *(.rela.dtors) }\r
121   .rel.init               : { *(.rel.init) }\r
122   .rela.init              : { *(.rela.init) }\r
123   .rel.fini               : { *(.rel.fini) }\r
124   .rela.fini              : { *(.rela.fini) }\r
125   .rel.plt                : { *(.rel.plt) }\r
126   .rela.plt               : { *(.rela.plt) }\r
127   */\r
128   \r
129   /* Concatenate .page0 sections.  Put them in the page0 memory bank\r
130      unless we are creating a relocatable file.  */\r
131   .page0 :\r
132   {\r
133     *(.page0)\r
134   }  > page0\r
135   \r
136   \r
137   /* PPAGE memory banks */\r
138   .bank_A :\r
139   {\r
140     *(.bank_A)\r
141     *(.text.bank_A*)\r
142     \r
143     /* BANK_A MODULES */\r
144     Os_Cfg.o(.text)\r
145     EcuM.o(.text)\r
146     EcuM_Cfg.o(.text)\r
147     EcuM_Callout_template.o(.text)\r
148     Mcu.o(.text)\r
149     event.o(.text)\r
150     init.o(.text)\r
151     arch.o(.text)\r
152     task.o(.text)\r
153     alarm.o(.text)\r
154         \r
155     . = ALIGN(2);\r
156   } > bank_A AT>bank_A_lma  =0xff\r
157 \r
158   .bank_B :\r
159   {\r
160     *(.bank_B)\r
161     *(.text.bank_B*)\r
162 \r
163     /* BANK_B MODULES */\r
164     resource.o(.text)\r
165     sched_table.o(.text)\r
166     counter.o(.text)\r
167     sys_tick.o(.text)\r
168     isr.o(.text)\r
169     os_arctest.o(.text)\r
170     irq.o(.text)\r
171     Det.o(.text)\r
172     xtoa.o(.text)\r
173     newlib_port.o(.text)\r
174 \r
175     . = ALIGN(2);\r
176   } > bank_B AT>bank_B_lma =0xff\r
177 \r
178 \r
179   .bank_C :\r
180   {\r
181     *(.bank_C)\r
182     *(.text.bank_C*)\r
183 \r
184     /* BANK_C MODULES */\r
185     printf.o(.text)     \r
186         *_memcpy.o(.text)\r
187         *_memset.o(.text)\r
188         *_abort.o(.text)\r
189         *_subdi3.o(.text)\r
190         *_addsub_sf.o(.text)\r
191         *udivmod.o(.text)\r
192         /* *_negsi2.o(.text) */\r
193         *_pack_sf.o(.text)\r
194         *_unpack_sf.o(.text)\r
195         *udivmodsi4.o(.text)\r
196         /* *_ashlsi3.o(.text) */\r
197         /* *_lshrsi3.o(.text) */\r
198         *assert.o(.text)\r
199         *div.o(.text)\r
200         *fiprintf.o(.text)\r
201         *reent.o(.text)\r
202         *strcmp.o(.text)\r
203         *strncpy.o(.text)\r
204         *wcrtomb.o(.text)\r
205         *wcsrtombs.o(.text)\r
206         *wctomb_r.o(.text)\r
207         *wsetup.o(.text)\r
208         *fflush.o(.text)\r
209         *findfp.o(.text)\r
210         *freer.o(.text)\r
211         *_memcpy.o(.text)\r
212         \r
213     . = ALIGN(2);\r
214   } > bank_C AT>bank_C_lma  =0xff\r
215 \r
216 \r
217   .bank_D :\r
218   {\r
219     *(.bank_D)\r
220     *(.text.bank_D*)\r
221 \r
222     /* BANK_D MODULES */\r
223     Can*.o(.text)\r
224     Pdu*.o(.text)\r
225     Dio*.o(.text)\r
226 \r
227     . = ALIGN(2);\r
228   } > bank_D AT>bank_D_lma  =0xff\r
229 \r
230 \r
231   .bank_E :\r
232   {\r
233     *(.bank_E)\r
234     *(.text.bank_E*)\r
235 \r
236     /* BANK_E MODULES */\r
237     Port*.o(.text)\r
238     Com*.o(.text)\r
239 \r
240     . = ALIGN(2);\r
241   } > bank_E AT>bank_E_lma  =0xff\r
242 \r
243 \r
244   .bank_F :\r
245   {\r
246     *(.bank_F)\r
247    *(.text.bank_F*)\r
248 \r
249     /* BANK_F MODULES */\r
250     Adc*.o(.text)\r
251     Dem*.o(.text)\r
252     IoHwAb*.o(.text)\r
253         . = ALIGN(2);\r
254   } > bank_F AT>bank_F_lma  =0xff\r
255   \r
256   \r
257   /* Start of text section.  */\r
258   .stext   :\r
259   {\r
260     *(.stext)\r
261   }  > text AT>bank_FIX1_lma\r
262   .init   :\r
263   {\r
264     *(.init)\r
265   } AT>bank_FIX1_lma =0\r
266   .text  :\r
267   {\r
268     /* Put startup code at beginning so that _start keeps same address.  */\r
269     /* Startup code.  */\r
270     KEEP (*(.install0)) /* Section should setup the stack pointer.  */\r
271     KEEP (*(.install1)) /* Place holder for applications.  */\r
272     KEEP (*(.install2)) /* Optional installation of data sections in RAM.  */\r
273     KEEP (*(.install3)) /* Place holder for applications.  */\r
274     KEEP (*(.install4)) /* Section that calls the main.  */\r
275     *(.init)\r
276     *(.text)\r
277     *(.text.*)\r
278     /* .gnu.warning sections are handled specially by elf32.em.  */\r
279     *(.gnu.warning)\r
280     *(.gnu.linkonce.t.*)\r
281     *(.tramp)\r
282     *(.tramp.*)\r
283     /* Finish code.  */\r
284     KEEP (*(.fini0))    /* Beginning of finish code (_exit symbol).  */\r
285     KEEP (*(.fini1))    /* Place holder for applications.  */\r
286     KEEP (*(.fini2))    /* C++ destructors.  */\r
287     KEEP (*(.fini3))    /* Place holder for applications.  */\r
288     KEEP (*(.fini4))    /* Runtime exit.  */\r
289     _etext = .;\r
290     PROVIDE (etext = .);\r
291     . = ALIGN(2);\r
292   }  > text AT>bank_FIX1_lma =0xa7a7a7a7\r
293   \r
294   .eh_frame   :\r
295   {\r
296     KEEP (*(.eh_frame))\r
297   }  > text AT>bank_FIX1_lma\r
298   \r
299   .gcc_except_table   :\r
300   {\r
301     *(.gcc_except_table)\r
302   }  > text AT>bank_FIX1_lma\r
303   \r
304   .rodata    :\r
305   {\r
306     *(.rodata)\r
307     *(.rodata.*)\r
308     *(.gnu.linkonce.r*)\r
309     . = ALIGN(2);\r
310   }  > text_h AT>bank_FIX2_lma =0xffffffff\r
311   \r
312   .rodata1   :\r
313   {\r
314     *(.rodata1)\r
315     . = ALIGN(2);\r
316   }  > text_h AT>bank_FIX2_lma =0xffffffff\r
317   \r
318   /* Constructor and destructor tables are in ROM.  */\r
319   /*\r
320   .ctors   :\r
321   {\r
322      PROVIDE (__CTOR_LIST__ = .);\r
323     KEEP (*(.ctors))\r
324      PROVIDE(__CTOR_END__ = .);\r
325   }  > text\r
326     .dtors        :\r
327   {\r
328      PROVIDE(__DTOR_LIST__ = .);\r
329     KEEP (*(.dtors))\r
330      PROVIDE(__DTOR_END__ = .);\r
331   }  > text\r
332   .jcr   :\r
333   {\r
334     KEEP (*(.jcr))\r
335   }  > text\r
336   */\r
337   \r
338   /* Start of the data section image in ROM.  */\r
339   __data_image = .;\r
340   PROVIDE (__data_image = .);\r
341   /* All read-only sections that normally go in PROM must be above.\r
342      We construct the DATA image section in PROM at end of all these\r
343      read-only sections.  The data image must be copied at init time.\r
344      Refer to GNU ld, Section 3.6.8.2 Output Section LMA.  */\r
345   .data    : /* AT (__data_image) */\r
346   {\r
347     __data_section_start = .;\r
348     PROVIDE (__data_section_start = .);\r
349     *(.sdata)\r
350     *(.data)\r
351     *(.data.*)\r
352     *(.data1)\r
353     *(.gnu.linkonce.d.*)\r
354     CONSTRUCTORS\r
355     _edata  =  .;\r
356     PROVIDE (edata = .);\r
357     . = ALIGN(2);\r
358   }  > data AT>bank_FIX2_lma =0xffffffff\r
359   __data_section_size = SIZEOF(.data);\r
360   PROVIDE (__data_section_size = SIZEOF(.data));\r
361   __data_image_end = __data_image + __data_section_size;\r
362   \r
363   .ramlog :\r
364   {\r
365     *(.winidea_port)\r
366         *(.ramlog)\r
367         *(.dem_eventmemory_pri)\r
368   } > data\r
369   \r
370   .noice_port 0x2000 :\r
371   {\r
372       *(.noice_port)\r
373   } > data\r
374     \r
375 /* SCz: this does not work yet... This is supposed to force the loading\r
376    of _map_data.o (from libgcc.a) when the .data section is not empty.\r
377    By doing so, this should bring the code that copies the .data section\r
378    from ROM to RAM at init time.\r
379   ___pre_comp_data_size = SIZEOF(.data);\r
380   __install_data_sections = ___pre_comp_data_size > 0 ?\r
381                 __map_data_sections : 0;\r
382 */\r
383   /* .install  :\r
384   {\r
385     . = _data_image_end;\r
386   }  > text */\r
387   /* Relocation for some bss and data sections.  */\r
388   .bss   :\r
389   {\r
390     __bss_start = .;\r
391     *(.softregs)\r
392     *(.sbss)\r
393     *(.scommon)\r
394     *(.dynbss)\r
395     *(.bss)\r
396     *(.bss.*)\r
397     *(.gnu.linkonce.b.*)\r
398     *(COMMON)\r
399     PROVIDE (_end = .);\r
400   }  > data AT>bank_FIX2_lma\r
401   __bss_size = SIZEOF(.bss);\r
402   PROVIDE (__bss_size = SIZEOF(.bss));\r
403   .eeprom   :\r
404   {\r
405     *(.eeprom)\r
406     *(.eeprom.*)\r
407   }  > eeprom\r
408   /* If the 'vectors_addr' symbol is defined, it indicates the start address\r
409      of interrupt vectors.  This depends on the 68HC11 operating mode:\r
410                         Addr\r
411      Single chip        0xffc0\r
412      Extended mode      0xffc0\r
413      Bootstrap          0x00c0\r
414      Test               0xbfc0\r
415      In general, the vectors address is 0xffc0.  This can be overriden\r
416      with the '-defsym vectors_addr=0xbfc0' ld option.\r
417      Note: for the bootstrap mode, the interrupt vectors are at 0xbfc0 but\r
418      they are redirected to 0x00c0 by the internal PROM.  Application's vectors\r
419      must also consist of jump instructions (see Motorola's manual).  */\r
420 /*\r
421   PROVIDE (_vectors_addr = DEFINED (vectors_addr) ? vectors_addr : 0xffc0);\r
422   .vectors DEFINED (vectors_addr) ? vectors_addr : 0xffc0 :\r
423   */\r
424   .vectors :\r
425   {\r
426     KEEP (*(.vectors))\r
427   } >vectors AT>vectors_lma\r
428   \r
429   /* Stabs debugging sections.  */\r
430   .stab          0 : { *(.stab) }\r
431   .stabstr       0 : { *(.stabstr) }\r
432   .stab.excl     0 : { *(.stab.excl) }\r
433   .stab.exclstr  0 : { *(.stab.exclstr) }\r
434   .stab.index    0 : { *(.stab.index) }\r
435   .stab.indexstr 0 : { *(.stab.indexstr) }\r
436   .comment       0 : { *(.comment) }\r
437   /* DWARF debug sections.\r
438      Symbols in the DWARF debugging sections are relative to the beginning\r
439      of the section so we begin them at 0.\r
440      Treatment of DWARF debug section must be at end of the linker\r
441      script to avoid problems when there are undefined symbols. It's necessary\r
442      to avoid that the DWARF section is relocated before such undefined\r
443      symbols are found.  */\r
444   /* DWARF 1 */\r
445   .debug         0 : { *(.debug) }\r
446   .line          0 : { *(.line) }\r
447   /* GNU DWARF 1 extensions */\r
448   .debug_srcinfo 0 : { *(.debug_srcinfo) }\r
449   .debug_sfnames 0 : { *(.debug_sfnames) }\r
450   /* DWARF 1.1 and DWARF 2 */\r
451   .debug_aranges  0 : { *(.debug_aranges) }\r
452   .debug_pubnames 0 : { *(.debug_pubnames) }\r
453   /* DWARF 2 */\r
454   .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }\r
455   .debug_abbrev   0 : { *(.debug_abbrev) }\r
456   .debug_line     0 : { *(.debug_line) }\r
457   .debug_frame    0 : { *(.debug_frame) }\r
458   .debug_str      0 : { *(.debug_str) }\r
459   .debug_loc      0 : { *(.debug_loc) }\r
460   .debug_macinfo  0 : { *(.debug_macinfo) }\r
461 }\r