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
10 #include "memory.ldf"
\r
13 /* Setup the stack on the top of the data memory bank. */
\r
14 PROVIDE (_stack = 0x4000);
\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
31 *(.rel.gnu.linkonce.t.*)
\r
37 *(.rela.gnu.linkonce.t.*)
\r
43 *(.rel.gnu.linkonce.d.*)
\r
49 *(.rela.gnu.linkonce.d.*)
\r
55 *(.rel.gnu.linkonce.r.*)
\r
61 *(.rela.gnu.linkonce.r.*)
\r
67 *(.rel.gnu.linkonce.s.*)
\r
73 *(.rela.gnu.linkonce.s.*)
\r
79 *(.rel.gnu.linkonce.sb.*)
\r
85 *(.rel.gnu.linkonce.sb.*)
\r
91 *(.rel.gnu.linkonce.b.*)
\r
97 *(.rela.gnu.linkonce.b.*)
\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
129 /* Concatenate .page0 sections. Put them in the page0 memory bank
\r
130 unless we are creating a relocatable file. */
\r
137 /* PPAGE memory banks */
\r
143 /* BANK_A MODULES */
\r
147 EcuM_Callout_template.o(.text)
\r
156 } > bank_A AT>bank_A_lma =0xff
\r
163 /* BANK_B MODULES */
\r
165 sched_table.o(.text)
\r
169 os_arctest.o(.text)
\r
173 newlib_port.o(.text)
\r
176 } > bank_B AT>bank_B_lma =0xff
\r
184 /* BANK_C MODULES */
\r
190 *_addsub_sf.o(.text)
\r
192 /* *_negsi2.o(.text) */
\r
194 *_unpack_sf.o(.text)
\r
195 *udivmodsi4.o(.text)
\r
196 /* *_ashlsi3.o(.text) */
\r
197 /* *_lshrsi3.o(.text) */
\r
205 *wcsrtombs.o(.text)
\r
214 } > bank_C AT>bank_C_lma =0xff
\r
222 /* BANK_D MODULES */
\r
228 } > bank_D AT>bank_D_lma =0xff
\r
236 /* BANK_E MODULES */
\r
241 } > bank_E AT>bank_E_lma =0xff
\r
249 /* BANK_F MODULES */
\r
254 } > bank_F AT>bank_F_lma =0xff
\r
257 /* Start of text section. */
\r
261 } > text AT>bank_FIX1_lma
\r
265 } AT>bank_FIX1_lma =0
\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
278 /* .gnu.warning sections are handled specially by elf32.em. */
\r
280 *(.gnu.linkonce.t.*)
\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
290 PROVIDE (etext = .);
\r
292 } > text AT>bank_FIX1_lma =0xa7a7a7a7
\r
296 KEEP (*(.eh_frame))
\r
297 } > text AT>bank_FIX1_lma
\r
299 .gcc_except_table :
\r
301 *(.gcc_except_table)
\r
302 } > text AT>bank_FIX1_lma
\r
308 *(.gnu.linkonce.r*)
\r
310 } > text_h AT>bank_FIX2_lma =0xffffffff
\r
316 } > text_h AT>bank_FIX2_lma =0xffffffff
\r
318 /* Constructor and destructor tables are in ROM. */
\r
322 PROVIDE (__CTOR_LIST__ = .);
\r
324 PROVIDE(__CTOR_END__ = .);
\r
328 PROVIDE(__DTOR_LIST__ = .);
\r
330 PROVIDE(__DTOR_END__ = .);
\r
338 /* Start of the data section image in ROM. */
\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
347 __data_section_start = .;
\r
348 PROVIDE (__data_section_start = .);
\r
353 *(.gnu.linkonce.d.*)
\r
356 PROVIDE (edata = .);
\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
367 *(.dem_eventmemory_pri)
\r
370 .noice_port 0x2000 :
\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
385 . = _data_image_end;
\r
387 /* Relocation for some bss and data sections. */
\r
397 *(.gnu.linkonce.b.*)
\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
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
412 Extended mode 0xffc0
\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
421 PROVIDE (_vectors_addr = DEFINED (vectors_addr) ? vectors_addr : 0xffc0);
\r
422 .vectors DEFINED (vectors_addr) ? vectors_addr : 0xffc0 :
\r
427 } >vectors AT>vectors_lma
\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
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
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