# 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; | |
} |