blob: c495844ead68fc3e811a0330eaeb2acc03d8539b [file] [log] [blame]
/* 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) }
}