diff --git a/firmware/rom.lds b/firmware/rom.lds new file mode 100644 index 0000000000..2996ee6205 --- /dev/null +++ b/firmware/rom.lds @@ -0,0 +1,95 @@ +ENTRY(start) +OUTPUT_FORMAT(elf32-sh) +INPUT(crt0.o) +MEMORY +{ + DRAM : ORIGIN = 0x09000000, LENGTH = (2 * 0x100000) - 0x8000 + IRAM : ORIGIN = 0x0f000000, LENGTH = 0x1000 +#ifdef ARCHOS_RECORDER /* recorder v1 */ + FLASH : ORIGIN = 0x02000000 + 0x11010, LENGTH = 256K - 0x11010 +#else /* recorder v2 */ + FLASH : ORIGIN = 0x02000000 + 0x12010, LENGTH = 256K - 0x12010 +#endif +} +SECTIONS +{ + .vectors : + { + _datacopy = .; + } > FLASH + + .data : AT ( _datacopy ) + { + _datastart = .; + *(.resetvectors); + *(.vectors); + . = _datastart + 0x200; + *(.data) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + .datacopy : + { + . += SIZEOF(.data); + } > FLASH + + .text : + { + *(.init.text) + *(.text) + . = ALIGN(0x4); + } > FLASH + + .rodata : + { + *(.rodata) + *(.rodata.str1.4) + . = ALIGN(0x4); + } > FLASH + + .iramcopy : + { + _iramcopy = .; + } > FLASH + + .iram 0xf000000 : AT ( _iramcopy ) + { + _iramstart = .; + *(.icode) + *(.idata) + _iramend = .; + } > IRAM + + .stack : + { + *(.stack) + _stackbegin = .; + . += 0x2000; + _stackend = .; + } > DRAM + + .bss : + { + _edata = .; + *(.bss) + *(COMMON) + _end = .; + } > DRAM + + .mp3buf : + { + . = ALIGN(0x4); + _mp3buffer = .; + } > DRAM + + .mp3end (0x09000000 + (2 * 0x100000) - 0x8000): + { + _mp3end = .; + } > DRAM + + .plugin (0x09000000 + (2 * 0x100000) - 0x8000): + { + _pluginbuf = .; + } +}