//*****************************************************************************
//
// boot_demo1.icf - Linker configuration file for boot_demo1.
//
// Copyright (c) 2007 Luminary Micro, Inc.  All rights reserved.
// Luminary Micro Confidential - For Use Under NDA Only
//
//*****************************************************************************

//
// Define a memory region that covers the entire 4 GB addressible space of the
// processor.
//
define memory mem with size = 4G;

//
// Define a region for the on-chip flash.
//
define region FLASH = mem:[from 0x00000000 to 0x00003fff];

//
// Define a region for the on-chip SRAM.
//
define region SRAM = mem:[from 0x20000000 to 0x20000fff];

//
// Define a block for the heap.  The size should be set to something other
// than zero if things in the C library that require the heap are used.
//
define block HEAP with alignment = 8, size = 0x00000000 { };

//
// Indicate that the read/write values should be initialized by copying from
// flash.
//
initialize by copy { readwrite };

//
// Initicate that the noinit values should be left alone.  This includes the
// stack, which if initialized will destroy the return address from the
// initialization code, causing the processor to branch to zero and fault.
//
do not initialize { section .noinit };

//
// Place the interrupt vectors at the start of flash.
//
place at start of FLASH { readonly section .intvec };

//
// Place the remainder of the read-only items into flash.
//
place in FLASH { readonly };

//
// Place all read/write items into SRAM.
//
place in SRAM { readwrite, block HEAP };
