rockbox/firmware/app.lds
Jörg Hohensohn 7789f9804e preparation for running directly from flash ROM
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4283 a1c6a512-1295-4272-9138-f99709370657
2004-01-28 20:43:31 +00:00

183 lines
2.6 KiB
Text

#include "config.h"
ENTRY(start)
OUTPUT_FORMAT(elf32-sh)
INPUT(crt0.o)
#define PLUGINSIZE 0x8000
#ifdef DEBUG
#define DRAMSIZE 0x1f0000 - PLUGINSIZE
#define ORIGADDR 0x09010000
#else
#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE
#define ORIGADDR 0x09000000
#endif
#define ENDADDR (ORIGADDR + DRAMSIZE)
MEMORY
{
#ifdef NEO_MEMORY
ROM : ORIGIN = 0x00020000, LENGTH = 0x1E0000
SRAM : ORIGIN = 0x0C000000, LENGTH = 0x40000
#else
DRAM : ORIGIN = ORIGADDR, LENGTH = DRAMSIZE
#endif
IRAM : ORIGIN = 0x0f000000, LENGTH = 0x1000
}
SECTIONS
{
#ifdef NEO_MEMORY
.bss :
{
_edata = .;
*(.bss)
*(COMMON)
_end = .;
} > SRAM
.text :
{
. = ALIGN(0x4);
*(.vectors);
. = ALIGN(0x200);
*(.init.text)
*(.text)
} > ROM
.rodata :
{
*(.rodata)
*(.rodata.str1.4)
. = ALIGN(0x4);
} > ROM
.data : AT ( LOADADDR(.romdata) )
{
_datastart = .;
*(.data)
_dataend = .;
} > SRAM
.iram : AT ( _iramcopy )
{
_iramstart = .;
*(.icode)
*(.idata)
_iramend = .;
} > IRAM
.romdata :
{
_datacopy = .;
. += SIZEOF(.data);
_iramcopy = .;
. += SIZEOF(.iram);
} > ROM
.stack :
{
_stackbegin = .;
*(.stack)
. += 0x1000;
_stackend = .;
} > SRAM
.mp3buf :
{
_mp3buffer = .;
} > SRAM
.mp3end 0x0C040000 - 0x300:
{
_mp3end = .;
} > SRAM
.plugin 0x0C040000:
{
_pluginbuf = .;
} > SRAM
#else
.vectors :
{
*(.resetvectors);
*(.vectors);
. = ALIGN(0x200);
*(.init.text)
} > DRAM
.text :
{
*(.text)
. = ALIGN(0x4);
} > DRAM
.data :
{
*(.data)
. = ALIGN(0x4);
_datacopy = .; /* dummy here, only for ROM based */
_datastart = .;
_dataend = .;
} > DRAM
.rodata :
{
*(.rodata)
*(.rodata.str1.4)
. = ALIGN(0x4);
} > DRAM
.stack :
{
*(.stack)
_stackbegin = .;
/* We put the copy of the .iram section here to save space */
_iramcopy = .;
. += 0x2000;
_stackend = .;
} > DRAM
.bss :
{
_edata = .;
*(.bss)
*(COMMON)
_end = .;
} > DRAM
#ifdef DEBUG
.heap :
{
_poolstart = .;
. = 0x20000;
_poolend = .;
} > DRAM
#endif
.mp3buf :
{
_mp3buffer = .;
} > DRAM
.mp3end ENDADDR:
{
_mp3end = .;
} > DRAM
.plugin ENDADDR:
{
_pluginbuf = .;
}
.iram 0xf000000 : AT ( _iramcopy )
{
_iramstart = .;
*(.icode)
*(.idata)
_iramend = .;
} > IRAM
#endif
}