blob: eaaca876a9f91d302c8b71a044581c2ed60eefc7 [file] [log] [blame]
# NOTE: The debugger uses the Illegal Instruction Vector to stop.
# A small subroutine is written at the location VBR+0x408-VBR+0x40B
# to handle the exception. The Illegal Instruction Vector in
# the the vector table at VBR+0x10 is then pointed to it. When the
# debugger encounters an illegal instruction, it jumps to this
# subroutine, which ends with an RTE, then exits.
# Do not overwrite this area of memory otherwise the debugger may not
# exit properly.
# */
MEMORY
{
vectorflash(RX) : ORIGIN = 0x00000000, LENGTH = 0x00000418
flash (RX) : ORIGIN = 0x00000420, LENGTH = 0x0007FC00
vectorram(RWX) : ORIGIN = 0x20000000, LENGTH = 0x00000400
sram (RWX) : ORIGIN = 0x20000400, LENGTH = 0x0000FA00
ipsbar (RWX) : ORIGIN = 0x40000000, LENGTH = 0x0
}
SECTIONS
{
.ipsbar : {} > ipsbar
.vectorflash :
{
mcf5225x_vectors.s (.text)
} > vectorflash
.flash :
{
*(.text)
. = ALIGN(0x10);
*(.rodata)
___DATA_ROM = .;
} > flash
.data : AT(___DATA_ROM)
{
___DATA_RAM = . ;
*(.exception)
. = ALIGN(0x10);
__exception_table_start__ = .;
EXCEPTION
__exception_table_end__ = .;
___sinit__ = .;
STATICINIT
*(.data)
*(.relocate_code)
. = ALIGN (0x10);
___DATA_END = .;
__START_SDATA = .;
*(.sdata)
. = ALIGN (0x10);
__END_SDATA = .;
__SDA_BASE = .;
. = ALIGN(0x10);
} > sram
.bss :
{
. = ALIGN(0x10);
__START_SBSS = .;
*(.sbss)
*(SCOMMON)
__END_SBSS = .;
. = ALIGN(0x10);
__START_BSS = .;
*(.bss)
*(COMMON)
__END_BSS = .;
___BSS_START = __START_SBSS;
___BSS_END = __END_BSS;
. = ALIGN(0x10);
} >> sram
___FLASH = ADDR(.vectorflash);
___FLASH_SIZE = 0x00080000;
___SRAM = 0x20000400;
___SRAM_SIZE = 0x0000FC00;
___VECTOR_RAM = 0x20000000;
___IPSBAR = ADDR(.ipsbar);
___SP_SIZE = 0x200;
___HEAP_START = .;
___HEAP_END = ___SRAM + ___SRAM_SIZE - ___SP_SIZE;
___SP_END = ___HEAP_END;
___SP_INIT = ___SP_END + ___SP_SIZE;
___heap_addr = ___HEAP_START;
___heap_size = ___HEAP_END - ___HEAP_START ;
__SP_INIT = ___SP_INIT;
}