/* Linker script for MC689S12DP256 Flash | |
rom banks. | |
Author Jefferson L Smith; Robotronics, Inc. 2006 | |
*/ | |
OUTPUT_FORMAT("elf32-m68hc12", "elf32-m68hc12", | |
"elf32-m68hc12") | |
OUTPUT_ARCH(m68hc12) | |
ENTRY(_start) | |
/* Get memory banks definition from some user configuration file. | |
This file must be located in some linker directory (search path | |
with -L<dir>). See fixed memory banks emulation script. */ | |
INCLUDE memory.x; | |
SECTIONS | |
{ | |
/* Concatenate .page0 sections. Put them in the page0 memory bank | |
unless we are creating a relocatable file. */ | |
.page0 : | |
{ | |
*(.page0) | |
} > page0 | |
/* PPAGE memory banks */ | |
.bank0 : | |
{ | |
*(.bank0) | |
. = ALIGN(2); | |
} > bank0 =0xff | |
.bank1 : | |
{ | |
*(.bank1) | |
. = ALIGN(2); | |
} > bank1 =0xff | |
.bank2 : | |
{ | |
*(.bank2) | |
. = ALIGN(2); | |
} > bank2 =0xff | |
.bank3 : | |
{ | |
*(.bank3) | |
. = ALIGN(2); | |
} > bank3 =0xff | |
.bank4 : | |
{ | |
*(.bank4) | |
. = ALIGN(2); | |
} > bank4 =0xff | |
.bank5 : | |
{ | |
*(.bank5) | |
. = ALIGN(2); | |
} > bank5 =0xff | |
.bank6 : | |
{ | |
*(.bank6) | |
. = ALIGN(2); | |
} > bank6 =0xff | |
.bank7 : | |
{ | |
*(.bank7) | |
. = ALIGN(2); | |
} > bank7 =0xff | |
.bank8 : | |
{ | |
*(.bank8) | |
. = ALIGN(2); | |
} > bank8 =0xff | |
.bank9 : | |
{ | |
*(.bank9) | |
. = ALIGN(2); | |
} > bank9 =0xff | |
.bank10 : | |
{ | |
*(.bank10) | |
. = ALIGN(2); | |
} > bank10 =0xff | |
.bank11 : | |
{ | |
*(.bank11) | |
. = ALIGN(2); | |
} > bank11 =0xff | |
.bank12 : | |
{ | |
*(.bank12) | |
. = ALIGN(2); | |
} > bank12 =0xff | |
.bank13 : | |
{ | |
*(.bank13) | |
. = ALIGN(2); | |
} > bank13 =0xff | |
/* Start of text section. */ | |
.text : | |
{ | |
/* Put startup code at beginning so that _start keeps same address. */ | |
/* Startup code. */ | |
KEEP (*(.install0)) /* Section should setup the stack pointer. */ | |
KEEP (*(.install1)) /* Place holder for applications. */ | |
KEEP (*(.install2)) /* Optional installation of data sections in RAM. */ | |
KEEP (*(.install3)) /* Place holder for applications. */ | |
KEEP (*(.install4)) /* Section that calls the main. */ | |
*(.init) | |
*(.text) | |
*(.text.*) | |
*(.text_c) | |
/* .gnu.warning sections are handled specially by elf32.em. */ | |
*(.gnu.warning) | |
*(.gnu.linkonce.t.*) | |
*(.tramp) | |
*(.tramp.*) | |
/* Finish code. */ | |
KEEP (*(.fini0)) /* Beginning of finish code (_exit symbol). */ | |
KEEP (*(.fini1)) /* Place holder for applications. */ | |
KEEP (*(.fini2)) /* C++ destructors. */ | |
KEEP (*(.fini3)) /* Place holder for applications. */ | |
KEEP (*(.fini4)) /* Runtime exit. */ | |
_etext = .; | |
PROVIDE (etext = .); | |
. = ALIGN(2); | |
} > text AT>bank14 =0xff | |
.text_h : | |
{ | |
*(.text_h) /* Bootloader; high Flash area unbanked */ | |
. = ALIGN(2); | |
} > text_h AT>bank15 =0xff | |
.rodata : | |
{ | |
*(.rodata) | |
*(.rodata.*) | |
*(.gnu.linkonce.r*) | |
. = ALIGN(2); | |
} > text_h AT>bank15 =0xff | |
.eh_frame : | |
{ | |
KEEP (*(.eh_frame)) | |
. = ALIGN(2); | |
} > text_h AT>bank15 =0xff | |
/* Constructor and destructor tables are in ROM. */ | |
.ctors : | |
{ | |
PROVIDE (__CTOR_LIST__ = .); | |
KEEP (*(.ctors)) | |
PROVIDE(__CTOR_END__ = .); | |
. = ALIGN(2); | |
} > text_h AT>bank15 =0xff | |
.dtors : | |
{ | |
PROVIDE(__DTOR_LIST__ = .); | |
KEEP (*(.dtors)) | |
PROVIDE(__DTOR_END__ = .); | |
. = ALIGN(2); | |
} > text_h AT>bank15 =0xff | |
/* Start of the data section image in ROM. */ | |
__data_image = .; | |
PROVIDE (__data_image = .); | |
/* All read-only sections that normally go in PROM must be above. | |
We construct the DATA image section in PROM at end of all these | |
read-only sections. The data image must be copied at init time. | |
Refer to GNU ld, Section 3.6.8.2 Output Section LMA. */ | |
.data : | |
{ | |
__data_section_start = .; | |
PROVIDE (__data_section_start = .); | |
*(.sdata) | |
*(.data) | |
*(.data.*) | |
*(.data1) | |
*(.gnu.linkonce.d.*) | |
CONSTRUCTORS | |
_edata = .; | |
PROVIDE (edata = .); | |
. = ALIGN(2); | |
} > data AT>bank15 =0xff | |
__data_section_size = SIZEOF(.data); | |
__data_image_end = __data_image + __data_section_size; | |
PROVIDE (__data_section_size = SIZEOF(.data)); | |
/* .install : | |
{ | |
. = _data_image_end; | |
} > text */ | |
/* Relocation for some bss and data sections. */ | |
.softregs : | |
{ | |
__softregs_section_start = .; | |
*(.softregs) | |
__softregs_section_end = .; | |
} > data | |
__softregs_section_size = SIZEOF(.softregs); | |
.bss : | |
{ | |
__bss_start = .; | |
*(.sbss) | |
*(.scommon) | |
*(.dynbss) | |
*(.bss) | |
*(.bss.*) | |
*(.gnu.linkonce.b.*) | |
*(COMMON) | |
PROVIDE (_end = .); | |
} > data | |
__bss_size = SIZEOF(.bss); | |
PROVIDE (__bss_size = SIZEOF(.bss)); | |
.eeprom : | |
{ | |
*(.eeprom) | |
*(.eeprom.*) | |
. = ALIGN(2); | |
} > eeprom =0xff | |
/* If the 'vectors_addr' symbol is defined, it indicates the start address | |
of interrupt vectors. This depends on the 9S12 operating mode: | |
Addr | |
Hardware location LMA 0x10ff80, mirror 0xff80 | |
Called by dbug12 LMA 0x10ef80, mirror 0xef80 | |
Ram called by dbug12 0x3e00 | |
The default vectors address is (LMA) 0x10ff80. This can be overriden | |
with the '-defsym vectors_addr=0x...' ld option. | |
*/ | |
PROVIDE (_vectors_addr = DEFINED (vectors_addr) ? vectors_addr : 0x10ff80); | |
.vectors DEFINED (vectors_addr) ? vectors_addr : 0x10ff80 : | |
{ | |
KEEP (*(.vectors)) | |
} | |
/* Stabs debugging sections. */ | |
.stab 0 : { *(.stab) } | |
.stabstr 0 : { *(.stabstr) } | |
.stab.excl 0 : { *(.stab.excl) } | |
.stab.exclstr 0 : { *(.stab.exclstr) } | |
.stab.index 0 : { *(.stab.index) } | |
.stab.indexstr 0 : { *(.stab.indexstr) } | |
.comment 0 : { *(.comment) } | |
/* DWARF debug sections. | |
Symbols in the DWARF debugging sections are relative to the beginning | |
of the section so we begin them at 0. | |
Treatment of DWARF debug section must be at end of the linker | |
script to avoid problems when there are undefined symbols. It's necessary | |
to avoid that the DWARF section is relocated before such undefined | |
symbols are found. */ | |
/* DWARF 1 */ | |
.debug 0 : { *(.debug) } | |
.line 0 : { *(.line) } | |
/* GNU DWARF 1 extensions */ | |
.debug_srcinfo 0 : { *(.debug_srcinfo) } | |
.debug_sfnames 0 : { *(.debug_sfnames) } | |
/* DWARF 1.1 and DWARF 2 */ | |
.debug_aranges 0 : { *(.debug_aranges) } | |
.debug_pubnames 0 : { *(.debug_pubnames) } | |
/* DWARF 2 */ | |
.debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } | |
.debug_abbrev 0 : { *(.debug_abbrev) } | |
.debug_line 0 : { *(.debug_line) } | |
.debug_frame 0 : { *(.debug_frame) } | |
.debug_str 0 : { *(.debug_str) } | |
.debug_loc 0 : { *(.debug_loc) } | |
.debug_macinfo 0 : { *(.debug_macinfo) } | |
} |