/* Linker script for the Midas labs RTE-V850E/MA1-CB evaluation board (CONFIG_RTE_CB_MA1), with kernel in SDRAM, under Multi debugger. */ MEMORY { /* 1MB of SRAM; we can't use the last 32KB, because it's used by the monitor scratch-RAM. This memory is mirrored 4 times. */ SRAM : ORIGIN = SRAM_ADDR, LENGTH = (SRAM_SIZE - MON_SCRATCH_SIZE) /* Monitor scratch RAM; only the interrupt vectors should go here. */ MRAM : ORIGIN = MON_SCRATCH_ADDR, LENGTH = MON_SCRATCH_SIZE /* 32MB of SDRAM. */ SDRAM : ORIGIN = SDRAM_ADDR, LENGTH = SDRAM_SIZE } #ifdef CONFIG_RTE_CB_MA1_KSRAM # define KRAM SRAM #else # define KRAM SDRAM #endif SECTIONS { /* We can't use RAMK_KRAM_CONTENTS because that puts the whole kernel in a single ELF segment, and the Multi debugger (which we use to load the kernel) appears to have bizarre problems dealing with it. */ .text : { __kram_start = . ; TEXT_CONTENTS } > KRAM .data : { DATA_CONTENTS BSS_CONTENTS RAMK_INIT_CONTENTS __kram_end = . ; BOOTMAP_CONTENTS /* The address at which the interrupt vectors are initially loaded by the loader. We can't load the interrupt vectors directly into their target location, because the monitor ROM for the GHS Multi debugger barfs if we try. Unfortunately, Multi also doesn't deal correctly with ELF sections where the LMA and VMA differ (it just ignores the LMA), so we can't use that feature to work around the problem! What we do instead is just put the interrupt vectors into a normal section, and have the `mach_early_init' function for Midas boards do the necessary copying and relocation at runtime (this section basically only contains `jr' instructions, so it's not that hard). */ . = ALIGN (0x10) ; __intv_load_start = . ; INTV_CONTENTS } > KRAM .root ALIGN (4096) : { ROOT_FS_CONTENTS } > SDRAM }