diff --git a/apps/Makefile b/apps/Makefile index eee9c034dd..2c7f59012a 100644 --- a/apps/Makefile +++ b/apps/Makefile @@ -11,7 +11,9 @@ INCLUDES= $(TARGET_INC) -I$(FIRMDIR)/include -I$(FIRMDIR)/export -I. -I$(BUILDDI -I$(BUILDDIR)/bitmaps -I$(OBJDIR) DEPFILE = $(OBJDIR)/dep-apps -LDS := $(FIRMDIR)/app.lds + +LDS := $(FIRMDIR)/target/$(CPU)/$(MANUFACTURER)/app.lds + ROMLDS := $(FIRMDIR)/rom.lds ifdef ENABLEDPLUGINS diff --git a/firmware/app.lds b/firmware/app.lds deleted file mode 100644 index 5850a35fe1..0000000000 --- a/firmware/app.lds +++ /dev/null @@ -1,575 +0,0 @@ -#include "config.h" - -ENTRY(start) -#ifdef CPU_COLDFIRE -OUTPUT_FORMAT(elf32-m68k) -INPUT(target/coldfire/crt0.o) -#elif defined(CPU_ARM) -OUTPUT_FORMAT(elf32-littlearm) -OUTPUT_ARCH(arm) -#ifdef CPU_PP -INPUT(target/arm/crt0-pp.o) -#elif CONFIG_CPU==DM320 -INPUT(target/arm/tms320dm320/crt0.o) -#elif CONFIG_CPU==S3C2440 -INPUT(target/arm/s3c2440/crt0.o) -#elif defined(CPU_TCC780X) -INPUT(target/arm/tcc780x/crt0.o) -#elif CONFIG_CPU == PNX0101 -INPUT(target/arm/pnx0101/crt0-pnx0101.o) -#elif CONFIG_CPU == IMX31L -INPUT(target/arm/imx31/crt0.o) -#elif defined(CPU_ARM) -INPUT(target/arm/crt0.o) -#endif -#else -OUTPUT_FORMAT(elf32-sh) -INPUT(target/sh/crt0.o) -#endif - -#define PLUGINSIZE PLUGIN_BUFFER_SIZE -#define CODECSIZE CODEC_SIZE - -#ifdef DEBUG -#define STUBOFFSET 0x10000 -#else -#define STUBOFFSET 0 -#endif - -#if CONFIG_CPU==S3C2440 -#include "s3c2440.h" -#define DRAMSIZE (MEMORYSIZE * 0x100000) - 0x100 - PLUGINSIZE - STUBOFFSET - CODECSIZE - LCD_BUFFER_SIZE - TTB_SIZE -#elif CONFIG_CPU==IMX31L -#include "imx31l.h" -/* Subtract 1MB for the FRAME/TTB section */ -#define DRAMSIZE (MEMORYSIZE * 0x100000 - 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE -#elif CONFIG_CPU==DM320 -#include "dm320.h" -#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE - LCD_BUFFER_SIZE - TTB_SIZE -#else -#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE -#endif - -#if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300) -#define DRAMORIG 0x31000000 + STUBOFFSET -#define IRAMORIG 0x10000000 -#define IRAMSIZE 0xc000 -#elif defined(IAUDIO_X5) || defined(IAUDIO_M5) -#define DRAMORIG 0x31000000 + STUBOFFSET -#define IRAMORIG 0x10000000 -#define IRAMSIZE 0x10000 -#elif defined(CPU_PP) -#define DRAMORIG 0x00000000 + STUBOFFSET -#define IRAMORIG 0x40000000 -#define IRAMSIZE 0xc000 -#elif CONFIG_CPU==PNX0101 -#define DRAMORIG 0xc00000 + STUBOFFSET -#define IRAM0ORIG 0x000000 -#define IRAM0SIZE 0x7000 -#define IRAMORIG 0x400000 -#define IRAMSIZE 0x7000 -#elif CONFIG_CPU==S3C2440 -#define DRAMORIG 0x00000100 + STUBOFFSET -#define IRAMORIG DRAMORIG -#define IRAM DRAM -#define IRAMSIZE 0x1000 -#elif CONFIG_CPU==DM320 -#define DRAMORIG 0x00900000 + STUBOFFSET -#define IRAMORIG 0x00000000 -#define IRAMSIZE 0x4000 -#elif CONFIG_CPU==IMX31L -#define DRAMORIG (0x0 + STUBOFFSET) -/* #define IRAMORIG 0x1FFFC000 */ -#define IRAMORIG DRAMORIG -#define IRAM DRAM -#define IRAMSIZE 0x4000 -#elif defined(CPU_TCC780X) -#define DRAMORIG 0x20000000 + STUBOFFSET -#define ITCMORIG 0x00000000 -#define ITCMSIZE 0x1000 -#define DTCMORIG 0xA0000000 -#define DTCMSIZE 0x2000 -#define SRAMORIG 0x10000000 -#define SRAMSIZE 0xc000 -#else -#define DRAMORIG 0x09000000 + STUBOFFSET -#define IRAMORIG 0x0f000000 -#define IRAMSIZE 0x1000 -#endif - -/* End of the audio buffer, where the codec buffer starts */ -#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) - -/* Where the codec buffer ends, and the plugin buffer starts */ -#define ENDADDR (ENDAUDIOADDR + CODECSIZE) - -MEMORY -{ - DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE -#if defined(CPU_TCC780X) - /* Seperate data & instruction TCMs plus SRAM. */ - ITCM : ORIGIN = ITCMORIG, LENGTH = ITCMSIZE - DTCM : ORIGIN = DTCMORIG, LENGTH = DTCMSIZE - SRAM : ORIGIN = SRAMORIG, LENGTH = SRAMSIZE -#elif CONFIG_CPU != S3C2440 && CONFIG_CPU != IMX31L - IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE -#endif -#if CONFIG_CPU==PNX0101 - IRAM0 : ORIGIN = IRAM0ORIG, LENGTH = IRAM0SIZE -#endif -} - -SECTIONS -{ -#if (CONFIG_CPU==DM320) - .text : - { - loadaddress = .; - _loadaddress = .; - . = ALIGN(0x200); - *(.init.text) - *(.text*) - *(.glue_7) - *(.glue_7t) - . = ALIGN(0x4); - } > DRAM - - .rodata : - { - *(.rodata) /* problems without this, dunno why */ - *(.rodata*) - *(.rodata.str1.1) - *(.rodata.str1.4) - . = ALIGN(0x4); - - /* Pseudo-allocate the copies of the data sections */ - _datacopy = .; - } > DRAM - - /* TRICK ALERT! For RAM execution, we put the .data section at the - same load address as the copy. Thus, we don't waste extra RAM - when we don't actually need the copy. */ - .data : AT ( _datacopy ) - { - _datastart = .; - *(.data*) - . = ALIGN(0x4); - _dataend = .; - } > DRAM - - /DISCARD/ : - { - *(.eh_frame) - } - - .vectors IRAMORIG : - { - _vectorsstart = .; - *(.vectors); - _vectorsend = .; - } > IRAM AT> DRAM - - _vectorscopy = LOADADDR(.vectors); - - .iram : - { - _iramstart = .; - *(.icode) - *(.irodata) - *(.idata) - . = ALIGN(0x4); - _iramend = .; - } > IRAM AT> DRAM - - _iramcopy = LOADADDR(.iram); - - .ibss (NOLOAD) : - { - _iedata = .; - *(.ibss) - . = ALIGN(0x4); - _iend = .; - } > IRAM - - .stack : - { - *(.stack) - stackbegin = .; - . += 0x2000; - stackend = .; - } > IRAM - - .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram) + SIZEOF(.vectors): - { - _edata = .; - *(.bss*) - *(COMMON) - . = ALIGN(0x4); - _end = .; - } > DRAM - -#elif defined(CPU_TCC780X) - .text : - { - loadaddress = .; - _loadaddress = .; - . = ALIGN(0x200); - *(.init.text) - *(.text*) - *(.glue_7) - *(.glue_7t) - . = ALIGN(0x4); - } > DRAM - - .rodata : - { - *(.rodata) /* problems without this, dunno why */ - *(.rodata*) - *(.rodata.str1.1) - *(.rodata.str1.4) - . = ALIGN(0x4); - - /* Pseudo-allocate the copies of the data sections */ - _datacopy = .; - } > DRAM - - /* TRICK ALERT! For RAM execution, we put the .data section at the - same load address as the copy. Thus, we don't waste extra RAM - when we don't actually need the copy. */ - .data : AT ( _datacopy ) - { - _datastart = .; - *(.data*) - . = ALIGN(0x4); - _dataend = .; - } > DRAM - - /DISCARD/ : - { - *(.eh_frame) - } - - .vectors ITCMORIG : - { - _vectorsstart = .; - *(.vectors); - _vectorsend = .; - } > ITCM AT> DRAM - - _vectorscopy = LOADADDR(.vectors); - - .itcm : - { - _itcmstart = .; - _itcmend = .; - } > ITCM AT> DRAM - - _itcmcopy = LOADADDR(.itcm); - - .dtcm : - { - _dtcmstart = .; - _dtcmend = .; - } > DTCM AT> DRAM - - _dtcmcopy = LOADADDR(.dtcm); - - .iram : - { - _iramstart = .; - *(.irodata) - *(.idata) - *(.icode) - . = ALIGN(0x4); - _iramend = .; - } > SRAM AT> DRAM - - _iramcopy = LOADADDR(.iram); - - .ibss (NOLOAD) : - { - _iedata = .; - *(.ibss) - . = ALIGN(0x4); - _iend = .; - } > SRAM - - .stack : - { - *(.stack) - stackbegin = .; - . += 0x2000; - stackend = .; - } > SRAM - - .bss : - { - _edata = .; - *(.bss*) - *(COMMON) - . = ALIGN(0x4); - _end = .; - } > DRAM - -#elif CONFIG_CPU==S3C2440 || CONFIG_CPU == IMX31L - .text : - { - loadaddress = .; - _loadaddress = .; - . = ALIGN(0x200); - *(.init.text) - *(.text*) - *(.glue_7) - *(.glue_7t) - . = ALIGN(0x4); - } > DRAM - - .rodata : - { - *(.rodata) /* problems without this, dunno why */ - *(.rodata*) - *(.rodata.str1.1) - *(.rodata.str1.4) - . = ALIGN(0x4); - - /* Pseudo-allocate the copies of the data sections */ - _datacopy = .; - } > DRAM - - /* TRICK ALERT! For RAM execution, we put the .data section at the - same load address as the copy. Thus, we don't waste extra RAM - when we don't actually need the copy. */ - .data : AT ( _datacopy ) - { - _datastart = .; - *(.data*) - . = ALIGN(0x4); - _dataend = .; - } > DRAM - - /DISCARD/ : - { - *(.eh_frame) - } - - .vectors 0x0 : - { - _vectorsstart = .; - *(.vectors); - _vectorsend = .; - } AT> DRAM - - _vectorscopy = LOADADDR(.vectors); - - .iram : - { - _iramstart = .; - *(.icode) - *(.irodata) - *(.idata) - _iramend = .; - } > DRAM - - _iramcopy = LOADADDR(.iram); - - .ibss (NOLOAD) : - { - _iedata = .; - *(.ibss) - . = ALIGN(0x4); - _iend = .; - } > DRAM - - .stack : - { - *(.stack) - stackbegin = .; - . += 0x2000; - stackend = .; - } > DRAM - - .bss : - { - _edata = .; - *(.bss*) - *(COMMON) - . = ALIGN(0x4); - _end = .; - } > DRAM - -#else /* End CONFIG_CPU */ - -#if !defined(CPU_ARM) - .vectors : - { - loadaddress = .; - _loadaddress = .; - KEEP(*(.resetvectors)); - *(.resetvectors); - KEEP(*(.vectors)); - *(.vectors); - } > DRAM - - .text : - { -#else - .text : - { - loadaddress = .; - _loadaddress = .; -#endif - . = ALIGN(0x200); - *(.init.text) - *(.text*) -#ifdef CPU_ARM - *(.glue_7) - *(.glue_7t) -#endif - . = ALIGN(0x4); - } > DRAM - - .rodata : - { - *(.rodata) /* problems without this, dunno why */ - *(.rodata*) - *(.rodata.str1.1) - *(.rodata.str1.4) - . = ALIGN(0x4); - - /* Pseudo-allocate the copies of the data sections */ - _datacopy = .; - } > DRAM - - /* TRICK ALERT! For RAM execution, we put the .data section at the - same load address as the copy. Thus, we don't waste extra RAM - when we don't actually need the copy. */ - .data : AT ( _datacopy ) - { - _datastart = .; - *(.data*) - . = ALIGN(0x4); - _dataend = .; - } > DRAM - - /DISCARD/ : - { - *(.eh_frame) - } - -#if defined(CPU_ARM) - .vectors 0x0 : - { - _vectorsstart = .; - *(.vectors); - _vectorsend = .; -#if CONFIG_CPU==PNX0101 - *(.dmabuf) - } >IRAM0 AT> DRAM -#else - } AT> DRAM -#endif - - _vectorscopy = LOADADDR(.vectors); -#endif - -#if CONFIG_CPU==PNX0101 - .iram IRAMORIG + SIZEOF(.vectors) : -#else - .iram IRAMORIG : -#endif - { - _iramstart = .; - *(.icode) - *(.irodata) - *(.idata) - _iramend = .; - } > IRAM AT> DRAM - - _iramcopy = LOADADDR(.iram); - - .ibss (NOLOAD) : - { - _iedata = .; - *(.ibss) - . = ALIGN(0x4); - _iend = .; - } > IRAM - -#if defined(CPU_COLDFIRE) || defined(CPU_ARM) -#ifdef CPU_PP - .idle_stacks : - { - *(.idle_stacks) -#if NUM_CORES > 1 - cpu_idlestackbegin = .; - . += IDLE_STACK_SIZE; - cpu_idlestackend = .; -#endif - cop_idlestackbegin = .; - . += IDLE_STACK_SIZE; - cop_idlestackend = .; - } > IRAM -#endif - - .stack : - { - *(.stack) - stackbegin = .; - . += 0x2000; - stackend = .; - } > IRAM - -#else - /* TRICK ALERT! We want 0x2000 bytes of stack, but we set the section - size smaller, and allow the stack to grow into the .iram copy */ - .stack ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram): - { - *(.stack) - _stackbegin = . - SIZEOF(.iram); - . += 0x2000 - SIZEOF(.iram); - _stackend = .; - } > DRAM -#endif - -#if defined(CPU_COLDFIRE) - .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram): -#elif defined(CPU_ARM) - .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram) + SIZEOF(.vectors): -#else - .bss : -#endif - { - _edata = .; - *(.bss*) - *(COMMON) - . = ALIGN(0x4); - _end = .; - } > DRAM - -#endif - - .audiobuf ALIGN(4) : - { - _audiobuffer = .; - audiobuffer = .; - } > DRAM - - .audiobufend ENDAUDIOADDR: - { - audiobufend = .; - _audiobufend = .; - } > DRAM - - .codec ENDAUDIOADDR: - { - codecbuf = .; - _codecbuf = .; - } - - .plugin ENDADDR: - { - _pluginbuf = .; - pluginbuf = .; - } -} - diff --git a/firmware/target/arm/imx31/app.lds b/firmware/target/arm/imx31/app.lds new file mode 100644 index 0000000000..fda508dc50 --- /dev/null +++ b/firmware/target/arm/imx31/app.lds @@ -0,0 +1,150 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-littlearm) +OUTPUT_ARCH(arm) +INPUT(target/arm/imx31/crt0.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#include "imx31l.h" +/* Subtract 1MB for the FRAME/TTB section */ +#define DRAMSIZE (MEMORYSIZE * 0x100000 - 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE + +#define DRAMORIG (0x0 + STUBOFFSET) +/* #define IRAMORIG 0x1FFFC000 */ +#define IRAMORIG DRAMORIG +#define IRAM DRAM +#define IRAMSIZE 0x4000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE +} + +SECTIONS +{ + .text : + { + loadaddress = .; + _loadaddress = .; + . = ALIGN(0x200); + *(.init.text) + *(.text*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .vectors 0x0 : + { + _vectorsstart = .; + *(.vectors); + _vectorsend = .; + } AT> DRAM + + _vectorscopy = LOADADDR(.vectors); + + .iram : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + _iramend = .; + } > DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > DRAM + + .stack : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > DRAM + + .bss : + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} + diff --git a/firmware/target/arm/ipod/app.lds b/firmware/target/arm/ipod/app.lds new file mode 100644 index 0000000000..765a5f0389 --- /dev/null +++ b/firmware/target/arm/ipod/app.lds @@ -0,0 +1,160 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-littlearm) +OUTPUT_ARCH(arm) +INPUT(target/arm/crt0-pp.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE + +#define DRAMORIG 0x00000000 + STUBOFFSET +#define IRAMORIG 0x40000000 +#define IRAMSIZE 0xc000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE + IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE +} + +SECTIONS +{ + .text : + { + loadaddress = .; + _loadaddress = .; + . = ALIGN(0x200); + *(.init.text) + *(.text*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .vectors 0x0 : + { + _vectorsstart = .; + *(.vectors); + _vectorsend = .; + } AT> DRAM + + _vectorscopy = LOADADDR(.vectors); + + .iram IRAMORIG : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + _iramend = .; + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > IRAM + + .idle_stacks : + { + *(.idle_stacks) +#if NUM_CORES > 1 + cpu_idlestackbegin = .; + . += IDLE_STACK_SIZE; + cpu_idlestackend = .; +#endif + cop_idlestackbegin = .; + . += IDLE_STACK_SIZE; + cop_idlestackend = .; + } > IRAM + + .stack : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > IRAM + + .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram) + SIZEOF(.vectors): + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} + diff --git a/firmware/target/arm/iriver/app.lds b/firmware/target/arm/iriver/app.lds new file mode 100644 index 0000000000..765a5f0389 --- /dev/null +++ b/firmware/target/arm/iriver/app.lds @@ -0,0 +1,160 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-littlearm) +OUTPUT_ARCH(arm) +INPUT(target/arm/crt0-pp.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE + +#define DRAMORIG 0x00000000 + STUBOFFSET +#define IRAMORIG 0x40000000 +#define IRAMSIZE 0xc000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE + IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE +} + +SECTIONS +{ + .text : + { + loadaddress = .; + _loadaddress = .; + . = ALIGN(0x200); + *(.init.text) + *(.text*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .vectors 0x0 : + { + _vectorsstart = .; + *(.vectors); + _vectorsend = .; + } AT> DRAM + + _vectorscopy = LOADADDR(.vectors); + + .iram IRAMORIG : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + _iramend = .; + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > IRAM + + .idle_stacks : + { + *(.idle_stacks) +#if NUM_CORES > 1 + cpu_idlestackbegin = .; + . += IDLE_STACK_SIZE; + cpu_idlestackend = .; +#endif + cop_idlestackbegin = .; + . += IDLE_STACK_SIZE; + cop_idlestackend = .; + } > IRAM + + .stack : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > IRAM + + .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram) + SIZEOF(.vectors): + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} + diff --git a/firmware/target/arm/olympus/app.lds b/firmware/target/arm/olympus/app.lds new file mode 100644 index 0000000000..765a5f0389 --- /dev/null +++ b/firmware/target/arm/olympus/app.lds @@ -0,0 +1,160 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-littlearm) +OUTPUT_ARCH(arm) +INPUT(target/arm/crt0-pp.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE + +#define DRAMORIG 0x00000000 + STUBOFFSET +#define IRAMORIG 0x40000000 +#define IRAMSIZE 0xc000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE + IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE +} + +SECTIONS +{ + .text : + { + loadaddress = .; + _loadaddress = .; + . = ALIGN(0x200); + *(.init.text) + *(.text*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .vectors 0x0 : + { + _vectorsstart = .; + *(.vectors); + _vectorsend = .; + } AT> DRAM + + _vectorscopy = LOADADDR(.vectors); + + .iram IRAMORIG : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + _iramend = .; + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > IRAM + + .idle_stacks : + { + *(.idle_stacks) +#if NUM_CORES > 1 + cpu_idlestackbegin = .; + . += IDLE_STACK_SIZE; + cpu_idlestackend = .; +#endif + cop_idlestackbegin = .; + . += IDLE_STACK_SIZE; + cop_idlestackend = .; + } > IRAM + + .stack : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > IRAM + + .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram) + SIZEOF(.vectors): + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} + diff --git a/firmware/target/arm/pnx0101/app.lds b/firmware/target/arm/pnx0101/app.lds new file mode 100644 index 0000000000..28ca53736d --- /dev/null +++ b/firmware/target/arm/pnx0101/app.lds @@ -0,0 +1,151 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-littlearm) +OUTPUT_ARCH(arm) +INPUT(target/arm/pnx0101/crt0-pnx0101.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE + +#define DRAMORIG 0xc00000 + STUBOFFSET +#define IRAM0ORIG 0x000000 +#define IRAM0SIZE 0x7000 +#define IRAMORIG 0x400000 +#define IRAMSIZE 0x7000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE + IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE + IRAM0 : ORIGIN = IRAM0ORIG, LENGTH = IRAM0SIZE +} + +SECTIONS +{ + .text : + { + loadaddress = .; + _loadaddress = .; + . = ALIGN(0x200); + *(.init.text) + *(.text*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .vectors 0x0 : + { + _vectorsstart = .; + *(.vectors); + _vectorsend = .; + *(.dmabuf) + } >IRAM0 AT> DRAM + + _vectorscopy = LOADADDR(.vectors); + + .iram IRAMORIG + SIZEOF(.vectors) : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + _iramend = .; + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > IRAM + + .stack : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > IRAM + + .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram) + SIZEOF(.vectors): + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} + diff --git a/firmware/target/arm/s3c2440/app.lds b/firmware/target/arm/s3c2440/app.lds new file mode 100644 index 0000000000..3528ed86bf --- /dev/null +++ b/firmware/target/arm/s3c2440/app.lds @@ -0,0 +1,147 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-littlearm) +OUTPUT_ARCH(arm) +INPUT(target/arm/s3c2440/crt0.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#include "cpu.h" +#define DRAMSIZE (MEMORYSIZE * 0x100000) - 0x100 - STUBOFFSET - PLUGINSIZE - CODECSIZE - LCD_BUFFER_SIZE - TTB_SIZE + +#define DRAMORIG 0x00000100 + STUBOFFSET +#define IRAMORIG DRAMORIG +#define IRAM DRAM +#define IRAMSIZE 0x1000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE +} + +SECTIONS +{ + .text : + { + loadaddress = .; + _loadaddress = .; + . = ALIGN(0x200); + *(.init.text) + *(.text*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .vectors 0x0 : + { + _vectorsstart = .; + *(.vectors); + _vectorsend = .; + } AT> DRAM + + _vectorscopy = LOADADDR(.vectors); + + .iram : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + _iramend = .; + } > DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > DRAM + + .stack : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > DRAM + + .bss : + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} diff --git a/firmware/target/arm/sandisk/app.lds b/firmware/target/arm/sandisk/app.lds new file mode 100644 index 0000000000..765a5f0389 --- /dev/null +++ b/firmware/target/arm/sandisk/app.lds @@ -0,0 +1,160 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-littlearm) +OUTPUT_ARCH(arm) +INPUT(target/arm/crt0-pp.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE + +#define DRAMORIG 0x00000000 + STUBOFFSET +#define IRAMORIG 0x40000000 +#define IRAMSIZE 0xc000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE + IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE +} + +SECTIONS +{ + .text : + { + loadaddress = .; + _loadaddress = .; + . = ALIGN(0x200); + *(.init.text) + *(.text*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .vectors 0x0 : + { + _vectorsstart = .; + *(.vectors); + _vectorsend = .; + } AT> DRAM + + _vectorscopy = LOADADDR(.vectors); + + .iram IRAMORIG : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + _iramend = .; + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > IRAM + + .idle_stacks : + { + *(.idle_stacks) +#if NUM_CORES > 1 + cpu_idlestackbegin = .; + . += IDLE_STACK_SIZE; + cpu_idlestackend = .; +#endif + cop_idlestackbegin = .; + . += IDLE_STACK_SIZE; + cop_idlestackend = .; + } > IRAM + + .stack : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > IRAM + + .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram) + SIZEOF(.vectors): + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} + diff --git a/firmware/target/arm/tcc780x/app.lds b/firmware/target/arm/tcc780x/app.lds new file mode 100644 index 0000000000..069dd24b9c --- /dev/null +++ b/firmware/target/arm/tcc780x/app.lds @@ -0,0 +1,170 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-littlearm) +OUTPUT_ARCH(arm) +INPUT(target/arm/tcc780x/crt0.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE + +#define DRAMORIG 0x20000000 + STUBOFFSET +#define ITCMORIG 0x00000000 +#define ITCMSIZE 0x1000 +#define DTCMORIG 0xA0000000 +#define DTCMSIZE 0x2000 +#define SRAMORIG 0x10000000 +#define SRAMSIZE 0xc000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE + /* Seperate data & instruction TCMs plus SRAM. */ + ITCM : ORIGIN = ITCMORIG, LENGTH = ITCMSIZE + DTCM : ORIGIN = DTCMORIG, LENGTH = DTCMSIZE + SRAM : ORIGIN = SRAMORIG, LENGTH = SRAMSIZE +} + +SECTIONS +{ + .text : + { + loadaddress = .; + _loadaddress = .; + . = ALIGN(0x200); + *(.init.text) + *(.text*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .vectors ITCMORIG : + { + _vectorsstart = .; + *(.vectors); + _vectorsend = .; + } > ITCM AT> DRAM + + _vectorscopy = LOADADDR(.vectors); + + .itcm : + { + _itcmstart = .; + _itcmend = .; + } > ITCM AT> DRAM + + _itcmcopy = LOADADDR(.itcm); + + .dtcm : + { + _dtcmstart = .; + _dtcmend = .; + } > DTCM AT> DRAM + + _dtcmcopy = LOADADDR(.dtcm); + + .iram : + { + _iramstart = .; + *(.irodata) + *(.idata) + *(.icode) + . = ALIGN(0x4); + _iramend = .; + } > SRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > SRAM + + .stack : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > SRAM + + .bss : + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} diff --git a/firmware/target/arm/tms320dm320/app.lds b/firmware/target/arm/tms320dm320/app.lds new file mode 100644 index 0000000000..289e1bb218 --- /dev/null +++ b/firmware/target/arm/tms320dm320/app.lds @@ -0,0 +1,149 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-littlearm) +OUTPUT_ARCH(arm) +INPUT(target/arm/tms320dm320/crt0.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#include "cpu.h" +#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - PLUGINSIZE - CODECSIZE - LCD_BUFFER_SIZE - TTB_SIZE + +#define DRAMORIG 0x00900000 + STUBOFFSET +#define IRAMORIG 0x00000000 +#define IRAMSIZE 0x4000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE + IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE +} + +SECTIONS +{ + .text : + { + loadaddress = .; + _loadaddress = .; + . = ALIGN(0x200); + *(.init.text) + *(.text*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .vectors IRAMORIG : + { + _vectorsstart = .; + *(.vectors); + _vectorsend = .; + } > IRAM AT> DRAM + + _vectorscopy = LOADADDR(.vectors); + + .iram : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + . = ALIGN(0x4); + _iramend = .; + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > IRAM + + .stack : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > IRAM + + .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram) + SIZEOF(.vectors): + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} + diff --git a/firmware/target/coldfire/iaudio/app.lds b/firmware/target/coldfire/iaudio/app.lds new file mode 100644 index 0000000000..f7d8e975da --- /dev/null +++ b/firmware/target/coldfire/iaudio/app.lds @@ -0,0 +1,143 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-m68k) +INPUT(target/coldfire/crt0.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE + +#define DRAMORIG 0x31000000 + STUBOFFSET +#define IRAMORIG 0x10000000 +#define IRAMSIZE 0x10000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE + IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE +} + +SECTIONS +{ + .vectors : + { + loadaddress = .; + _loadaddress = .; + KEEP(*(.resetvectors)); + *(.resetvectors); + KEEP(*(.vectors)); + *(.vectors); + } > DRAM + + .text : + { + . = ALIGN(0x200); + *(.init.text) + *(.text*) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .iram IRAMORIG : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + _iramend = .; + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > IRAM + + .stack : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > IRAM + + .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram): + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} + diff --git a/firmware/target/coldfire/iriver/app.lds b/firmware/target/coldfire/iriver/app.lds new file mode 100644 index 0000000000..3e4c81fe51 --- /dev/null +++ b/firmware/target/coldfire/iriver/app.lds @@ -0,0 +1,143 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-m68k) +INPUT(target/coldfire/crt0.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE + +#define DRAMORIG 0x31000000 + STUBOFFSET +#define IRAMORIG 0x10000000 +#define IRAMSIZE 0xc000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE + IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE +} + +SECTIONS +{ + .vectors : + { + loadaddress = .; + _loadaddress = .; + KEEP(*(.resetvectors)); + *(.resetvectors); + KEEP(*(.vectors)); + *(.vectors); + } > DRAM + + .text : + { + . = ALIGN(0x200); + *(.init.text) + *(.text*) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .iram IRAMORIG : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + _iramend = .; + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > IRAM + + .stack : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > IRAM + + .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram): + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} + diff --git a/firmware/target/sh/archos/app.lds b/firmware/target/sh/archos/app.lds new file mode 100644 index 0000000000..94cb437706 --- /dev/null +++ b/firmware/target/sh/archos/app.lds @@ -0,0 +1,145 @@ +#include "config.h" + +ENTRY(start) + +OUTPUT_FORMAT(elf32-sh) +INPUT(target/sh/crt0.o) + +#define PLUGINSIZE PLUGIN_BUFFER_SIZE +#define CODECSIZE CODEC_SIZE + +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE + +#define DRAMORIG 0x09000000 + STUBOFFSET +#define IRAMORIG 0x0f000000 +#define IRAMSIZE 0x1000 + +/* End of the audio buffer, where the codec buffer starts */ +#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE) + +/* Where the codec buffer ends, and the plugin buffer starts */ +#define ENDADDR (ENDAUDIOADDR + CODECSIZE) + +MEMORY +{ + DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE + IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE +} + +SECTIONS +{ + .vectors : + { + loadaddress = .; + _loadaddress = .; + KEEP(*(.resetvectors)); + *(.resetvectors); + KEEP(*(.vectors)); + *(.vectors); + } > DRAM + + .text : + { + . = ALIGN(0x200); + *(.init.text) + *(.text*) + . = ALIGN(0x4); + } > DRAM + + .rodata : + { + *(.rodata) /* problems without this, dunno why */ + *(.rodata*) + *(.rodata.str1.1) + *(.rodata.str1.4) + . = ALIGN(0x4); + + /* Pseudo-allocate the copies of the data sections */ + _datacopy = .; + } > DRAM + + /* TRICK ALERT! For RAM execution, we put the .data section at the + same load address as the copy. Thus, we don't waste extra RAM + when we don't actually need the copy. */ + .data : AT ( _datacopy ) + { + _datastart = .; + *(.data*) + . = ALIGN(0x4); + _dataend = .; + } > DRAM + + /DISCARD/ : + { + *(.eh_frame) + } + + .iram IRAMORIG : + { + _iramstart = .; + *(.icode) + *(.irodata) + *(.idata) + _iramend = .; + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > IRAM + + /* TRICK ALERT! We want 0x2000 bytes of stack, but we set the section + size smaller, and allow the stack to grow into the .iram copy */ + .stack ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram): + { + *(.stack) + _stackbegin = . - SIZEOF(.iram); + . += 0x2000 - SIZEOF(.iram); + _stackend = .; + } > DRAM + + .bss : + { + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .audiobuf ALIGN(4) : + { + _audiobuffer = .; + audiobuffer = .; + } > DRAM + + .audiobufend ENDAUDIOADDR: + { + audiobufend = .; + _audiobufend = .; + } > DRAM + + .codec ENDAUDIOADDR: + { + codecbuf = .; + _codecbuf = .; + } + + .plugin ENDADDR: + { + _pluginbuf = .; + pluginbuf = .; + } +} +