summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2013-07-19 08:18:16 -0400
committerMichael Sevakis <jethead71@rockbox.org>2013-07-19 08:18:16 -0400
commitd2249dce6f4dda8cb71e048ced6562f26515d27f (patch)
tree897a1da0147d9ea459d6ca3ec7234695dacfaa49
parent4596f51c90db76d125c7c963efa4876443a82440 (diff)
downloadrockbox-d2249dc.tar.gz
rockbox-d2249dc.tar.bz2
rockbox-d2249dc.zip
Combine PortalPlayer .lds files into one for app and boot.
These nearly identical files are multiplying like rabbits as PP targets are added and make SoC-related changes a PITA. Just include the master .lds file from the target one as was done for bootloader USB. Change-Id: I65e9e653030f0688b1728e32ada16abf2932e029
-rw-r--r--firmware/target/arm/ipod/app.lds200
-rw-r--r--firmware/target/arm/ipod/boot.lds80
-rw-r--r--firmware/target/arm/iriver/app.lds196
-rw-r--r--firmware/target/arm/olympus/app.lds196
-rw-r--r--firmware/target/arm/olympus/boot.lds64
-rw-r--r--firmware/target/arm/pbell/app.lds196
-rw-r--r--firmware/target/arm/pbell/boot.lds64
-rw-r--r--firmware/target/arm/philips/app.lds196
-rw-r--r--firmware/target/arm/philips/boot.lds67
-rw-r--r--firmware/target/arm/pp/app-pp.lds199
-rw-r--r--firmware/target/arm/pp/boot-pp.lds92
-rw-r--r--firmware/target/arm/samsung/app.lds196
-rw-r--r--firmware/target/arm/samsung/boot.lds64
-rw-r--r--firmware/target/arm/sandisk/app.lds193
-rw-r--r--firmware/target/arm/sandisk/boot.lds77
-rw-r--r--firmware/target/arm/tatung/app.lds184
-rw-r--r--firmware/target/arm/tatung/boot.lds64
17 files changed, 308 insertions, 2020 deletions
diff --git a/firmware/target/arm/ipod/app.lds b/firmware/target/arm/ipod/app.lds
index 258f296a85..856cc52bb0 100644
--- a/firmware/target/arm/ipod/app.lds
+++ b/firmware/target/arm/ipod/app.lds
@@ -1,200 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp.o)
-
-#define PLUGINSIZE PLUGIN_BUFFER_SIZE
-#define CODECSIZE CODEC_SIZE
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - CODECSIZE
-
-#define DRAMORIG 0x00000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0xc000
-
-#ifdef CPU_PP502x
-#define NOCACHE_BASE 0x10000000
-#else
-#define NOCACHE_BASE 0x28000000
-#endif
-
-#define CACHEALIGN_SIZE 16
-
-/* 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);
- } > DRAM
-
- .data :
- {
- *(.data*)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- /* .ncdata section is placed at uncached physical alias address and is
- * loaded at the proper cached virtual address - no copying is
- * performed in the init code */
- .ncdata . + NOCACHE_BASE :
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncdata*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /DISCARD/ :
- {
- *(.eh_frame)
- }
-
- .vectors 0x0 :
- {
- _vectorsstart = .;
- KEEP(*(.vectors));
- _vectorsend = .;
- } AT> DRAM
-
- _vectorscopy = LOADADDR(.vectors);
- _noloaddram = LOADADDR(.vectors);
-
- .ibss IRAMORIG (NOLOAD) :
- {
- _iedata = .;
- *(.qharray)
- *(.ibss)
- . = ALIGN(0x4);
- _iend = .;
- } > IRAM
-
- .iram _iend :
- {
- _iramstart = .;
- *(.icode)
- *(.irodata)
- *(.idata)
- . = ALIGN(0x4);
- _iramend = .;
- } > IRAM AT> DRAM
-
- _iramcopy = LOADADDR(.iram);
-
-
- .init ENDAUDIOADDR :
- {
- . = ALIGN(4);
- _initstart = .;
- *(.init*)
- _initend = .;
- } AT> DRAM
-
- _initcopy = LOADADDR(.init);
-
- .idle_stacks (NOLOAD) :
- {
- *(.idle_stacks)
-#if NUM_CORES > 1
- cpu_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cpu_idlestackend = .;
-#endif
- cop_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cop_idlestackend = .;
- } > IRAM
-
- .stack (NOLOAD) :
- {
- *(.stack)
- stackbegin = .;
- . += 0x2000;
- stackend = .;
- } > IRAM
-
- /* .bss and .ncbss are treated as a single section to use one init loop to
- * zero it - note "_edata" and "_end" */
- .bss _noloaddram (NOLOAD) :
- {
- _edata = .;
- *(.bss*)
- *(COMMON)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- .ncbss . + NOCACHE_BASE (NOLOAD):
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncbss*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /* This will be aligned by preceding alignments */
- .endaddr . - NOCACHE_BASE (NOLOAD) :
- {
- _end = .;
- } > DRAM
-
- .audiobuf (NOLOAD) :
- {
- _audiobuffer = .;
- . = ALIGN(0x4);
- audiobuffer = .;
- } > DRAM
-
- .audiobufend ENDAUDIOADDR (NOLOAD) :
- {
-#ifdef IPOD_VIDEO
- audiobufend_lds = .;
-#else
- audiobufend = .;
-#endif
- _audiobufend = .;
- } > DRAM
-
- .codec ENDAUDIOADDR (NOLOAD) :
- {
- codecbuf = .;
- _codecbuf = .;
- }
-
- .plugin ENDADDR (NOLOAD) :
- {
- _pluginbuf = .;
- pluginbuf = .;
- }
-}
+#include "../pp/app-pp.lds"
diff --git a/firmware/target/arm/ipod/boot.lds b/firmware/target/arm/ipod/boot.lds
index 6cd30c9eee..33b826bec8 100644
--- a/firmware/target/arm/ipod/boot.lds
+++ b/firmware/target/arm/ipod/boot.lds
@@ -1,80 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp-bl.o)
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000)
-
-#if CONFIG_CPU == PP5020
-#define DRAMORIG 0x10000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0x18000
-#define FLASHORIG 0x001f0000
-#define FLASHSIZE 2M
-#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024)
-#define DRAMORIG 0x10000000
-#ifndef IRAMORIG
-#define IRAMORIG 0x40000000
-#endif
-#define IRAMSIZE 0x20000
-#define FLASHORIG 0x001f0000
-#define FLASHSIZE 2M
-#elif CONFIG_CPU == PP5002
-#define DRAMORIG 0x28000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0x18000
-#define FLASHORIG 0x001f0000
-#define FLASHSIZE 2M
-#endif
-
-MEMORY
-{
- DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
- IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
-}
-
-SECTIONS
-{
- . = IRAMORIG;
-
- .text : {
- *(.init.text)
- *(.text*)
- *(.glue_7)
- *(.glue_7t)
- } > IRAM
-
- .data : {
- *(.icode)
- *(.irodata)
- *(.idata)
- *(.data*)
- *(.ncdata*)
- *(.rodata*)
- _dataend = . ;
- } > IRAM
-
- .stack (NOLOAD) : {
- *(.stack)
- _stackbegin = .;
- stackbegin = .;
- . += 0x2000;
- _stackend = .;
- stackend = .;
- } > IRAM
-
- /* The bss section is too large for IRAM - we just move it 16MB into the
- DRAM */
-
- . = DRAMORIG;
- .bss . + (16*1024*1024) (NOLOAD) : {
- _edata = .;
- *(.bss*);
- *(.ibss);
- *(COMMON)
- *(.ncbss*);
- _end = .;
- } > DRAM
-}
+#include "../pp/boot-pp.lds"
diff --git a/firmware/target/arm/iriver/app.lds b/firmware/target/arm/iriver/app.lds
index 30e5962b82..856cc52bb0 100644
--- a/firmware/target/arm/iriver/app.lds
+++ b/firmware/target/arm/iriver/app.lds
@@ -1,196 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp.o)
-
-#define PLUGINSIZE PLUGIN_BUFFER_SIZE
-#define CODECSIZE CODEC_SIZE
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - CODECSIZE
-
-#define DRAMORIG 0x00000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0xc000
-
-#ifdef CPU_PP502x
-#define NOCACHE_BASE 0x10000000
-#else
-#define NOCACHE_BASE 0x28000000
-#endif
-
-#define CACHEALIGN_SIZE 16
-
-/* 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);
- } > DRAM
-
- .data :
- {
- *(.data*)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- /* .ncdata section is placed at uncached physical alias address and is
- * loaded at the proper cached virtual address - no copying is
- * performed in the init code */
- .ncdata . + NOCACHE_BASE :
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncdata*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /DISCARD/ :
- {
- *(.eh_frame)
- }
-
- .vectors 0x0 :
- {
- _vectorsstart = .;
- KEEP(*(.vectors));
- _vectorsend = .;
- } AT> DRAM
-
- _vectorscopy = LOADADDR(.vectors);
- _noloaddram = LOADADDR(.vectors);
-
- .ibss IRAMORIG (NOLOAD) :
- {
- _iedata = .;
- *(.qharray)
- *(.ibss)
- . = ALIGN(0x4);
- _iend = .;
- } > IRAM
-
- .iram _iend :
- {
- _iramstart = .;
- *(.icode)
- *(.irodata)
- *(.idata)
- . = ALIGN(0x4);
- _iramend = .;
- } > IRAM AT> DRAM
-
- _iramcopy = LOADADDR(.iram);
-
-
- .init ENDAUDIOADDR :
- {
- . = ALIGN(4);
- _initstart = .;
- *(.init*)
- _initend = .;
- } AT> DRAM
-
- _initcopy = LOADADDR(.init);
-
- .idle_stacks (NOLOAD) :
- {
- *(.idle_stacks)
-#if NUM_CORES > 1
- cpu_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cpu_idlestackend = .;
-#endif
- cop_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cop_idlestackend = .;
- } > IRAM
-
- .stack (NOLOAD) :
- {
- *(.stack)
- stackbegin = .;
- . += 0x2000;
- stackend = .;
- } > IRAM
-
- /* .bss and .ncbss are treated as a single section to use one init loop to
- * zero it - note "_edata" and "_end" */
- .bss _noloaddram (NOLOAD) :
- {
- _edata = .;
- *(.bss*)
- *(COMMON)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- .ncbss . + NOCACHE_BASE (NOLOAD):
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncbss*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /* This will be aligned by preceding alignments */
- .endaddr . - NOCACHE_BASE (NOLOAD) :
- {
- _end = .;
- } > DRAM
-
- .audiobuf (NOLOAD) :
- {
- _audiobuffer = .;
- . = ALIGN(0x4);
- audiobuffer = .;
- } > DRAM
-
- .audiobufend ENDAUDIOADDR (NOLOAD) :
- {
- audiobufend = .;
- _audiobufend = .;
- } > DRAM
-
- .codec ENDAUDIOADDR (NOLOAD) :
- {
- codecbuf = .;
- _codecbuf = .;
- }
-
- .plugin ENDADDR (NOLOAD) :
- {
- _pluginbuf = .;
- pluginbuf = .;
- }
-}
+#include "../pp/app-pp.lds"
diff --git a/firmware/target/arm/olympus/app.lds b/firmware/target/arm/olympus/app.lds
index 30e5962b82..856cc52bb0 100644
--- a/firmware/target/arm/olympus/app.lds
+++ b/firmware/target/arm/olympus/app.lds
@@ -1,196 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp.o)
-
-#define PLUGINSIZE PLUGIN_BUFFER_SIZE
-#define CODECSIZE CODEC_SIZE
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - CODECSIZE
-
-#define DRAMORIG 0x00000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0xc000
-
-#ifdef CPU_PP502x
-#define NOCACHE_BASE 0x10000000
-#else
-#define NOCACHE_BASE 0x28000000
-#endif
-
-#define CACHEALIGN_SIZE 16
-
-/* 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);
- } > DRAM
-
- .data :
- {
- *(.data*)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- /* .ncdata section is placed at uncached physical alias address and is
- * loaded at the proper cached virtual address - no copying is
- * performed in the init code */
- .ncdata . + NOCACHE_BASE :
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncdata*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /DISCARD/ :
- {
- *(.eh_frame)
- }
-
- .vectors 0x0 :
- {
- _vectorsstart = .;
- KEEP(*(.vectors));
- _vectorsend = .;
- } AT> DRAM
-
- _vectorscopy = LOADADDR(.vectors);
- _noloaddram = LOADADDR(.vectors);
-
- .ibss IRAMORIG (NOLOAD) :
- {
- _iedata = .;
- *(.qharray)
- *(.ibss)
- . = ALIGN(0x4);
- _iend = .;
- } > IRAM
-
- .iram _iend :
- {
- _iramstart = .;
- *(.icode)
- *(.irodata)
- *(.idata)
- . = ALIGN(0x4);
- _iramend = .;
- } > IRAM AT> DRAM
-
- _iramcopy = LOADADDR(.iram);
-
-
- .init ENDAUDIOADDR :
- {
- . = ALIGN(4);
- _initstart = .;
- *(.init*)
- _initend = .;
- } AT> DRAM
-
- _initcopy = LOADADDR(.init);
-
- .idle_stacks (NOLOAD) :
- {
- *(.idle_stacks)
-#if NUM_CORES > 1
- cpu_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cpu_idlestackend = .;
-#endif
- cop_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cop_idlestackend = .;
- } > IRAM
-
- .stack (NOLOAD) :
- {
- *(.stack)
- stackbegin = .;
- . += 0x2000;
- stackend = .;
- } > IRAM
-
- /* .bss and .ncbss are treated as a single section to use one init loop to
- * zero it - note "_edata" and "_end" */
- .bss _noloaddram (NOLOAD) :
- {
- _edata = .;
- *(.bss*)
- *(COMMON)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- .ncbss . + NOCACHE_BASE (NOLOAD):
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncbss*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /* This will be aligned by preceding alignments */
- .endaddr . - NOCACHE_BASE (NOLOAD) :
- {
- _end = .;
- } > DRAM
-
- .audiobuf (NOLOAD) :
- {
- _audiobuffer = .;
- . = ALIGN(0x4);
- audiobuffer = .;
- } > DRAM
-
- .audiobufend ENDAUDIOADDR (NOLOAD) :
- {
- audiobufend = .;
- _audiobufend = .;
- } > DRAM
-
- .codec ENDAUDIOADDR (NOLOAD) :
- {
- codecbuf = .;
- _codecbuf = .;
- }
-
- .plugin ENDADDR (NOLOAD) :
- {
- _pluginbuf = .;
- pluginbuf = .;
- }
-}
+#include "../pp/app-pp.lds"
diff --git a/firmware/target/arm/olympus/boot.lds b/firmware/target/arm/olympus/boot.lds
index 98d9cb62fe..33b826bec8 100644
--- a/firmware/target/arm/olympus/boot.lds
+++ b/firmware/target/arm/olympus/boot.lds
@@ -1,64 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp-bl.o)
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000)
-
-#define DRAMORIG 0x10000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0x18000
-#define FLASHORIG 0x001f0000
-#define FLASHSIZE 2M
-
-MEMORY
-{
- DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
- IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
-}
-
-SECTIONS
-{
- . = IRAMORIG;
-
- .text : {
- *(.init.text)
- *(.text*)
- *(.glue_7)
- *(.glue_7t)
- } > IRAM
-
- .data : {
- *(.icode)
- *(.irodata)
- *(.idata)
- *(.data*)
- *(.ncdata*)
- *(.rodata*)
- _dataend = . ;
- } > IRAM
-
- .stack (NOLOAD) : {
- *(.stack)
- _stackbegin = .;
- stackbegin = .;
- . += 0x2000;
- _stackend = .;
- stackend = .;
- } > IRAM
-
- /* The bss section is too large for IRAM - we just move it 16MB into the
- DRAM */
-
- . = DRAMORIG;
- .bss . + (16*1024*1024) (NOLOAD) : {
- _edata = .;
- *(.bss*);
- *(.ibss);
- *(COMMON)
- *(.ncbss*);
- _end = .;
- } > DRAM
-}
+#include "../pp/boot-pp.lds"
diff --git a/firmware/target/arm/pbell/app.lds b/firmware/target/arm/pbell/app.lds
index 30e5962b82..856cc52bb0 100644
--- a/firmware/target/arm/pbell/app.lds
+++ b/firmware/target/arm/pbell/app.lds
@@ -1,196 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp.o)
-
-#define PLUGINSIZE PLUGIN_BUFFER_SIZE
-#define CODECSIZE CODEC_SIZE
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - CODECSIZE
-
-#define DRAMORIG 0x00000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0xc000
-
-#ifdef CPU_PP502x
-#define NOCACHE_BASE 0x10000000
-#else
-#define NOCACHE_BASE 0x28000000
-#endif
-
-#define CACHEALIGN_SIZE 16
-
-/* 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);
- } > DRAM
-
- .data :
- {
- *(.data*)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- /* .ncdata section is placed at uncached physical alias address and is
- * loaded at the proper cached virtual address - no copying is
- * performed in the init code */
- .ncdata . + NOCACHE_BASE :
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncdata*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /DISCARD/ :
- {
- *(.eh_frame)
- }
-
- .vectors 0x0 :
- {
- _vectorsstart = .;
- KEEP(*(.vectors));
- _vectorsend = .;
- } AT> DRAM
-
- _vectorscopy = LOADADDR(.vectors);
- _noloaddram = LOADADDR(.vectors);
-
- .ibss IRAMORIG (NOLOAD) :
- {
- _iedata = .;
- *(.qharray)
- *(.ibss)
- . = ALIGN(0x4);
- _iend = .;
- } > IRAM
-
- .iram _iend :
- {
- _iramstart = .;
- *(.icode)
- *(.irodata)
- *(.idata)
- . = ALIGN(0x4);
- _iramend = .;
- } > IRAM AT> DRAM
-
- _iramcopy = LOADADDR(.iram);
-
-
- .init ENDAUDIOADDR :
- {
- . = ALIGN(4);
- _initstart = .;
- *(.init*)
- _initend = .;
- } AT> DRAM
-
- _initcopy = LOADADDR(.init);
-
- .idle_stacks (NOLOAD) :
- {
- *(.idle_stacks)
-#if NUM_CORES > 1
- cpu_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cpu_idlestackend = .;
-#endif
- cop_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cop_idlestackend = .;
- } > IRAM
-
- .stack (NOLOAD) :
- {
- *(.stack)
- stackbegin = .;
- . += 0x2000;
- stackend = .;
- } > IRAM
-
- /* .bss and .ncbss are treated as a single section to use one init loop to
- * zero it - note "_edata" and "_end" */
- .bss _noloaddram (NOLOAD) :
- {
- _edata = .;
- *(.bss*)
- *(COMMON)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- .ncbss . + NOCACHE_BASE (NOLOAD):
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncbss*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /* This will be aligned by preceding alignments */
- .endaddr . - NOCACHE_BASE (NOLOAD) :
- {
- _end = .;
- } > DRAM
-
- .audiobuf (NOLOAD) :
- {
- _audiobuffer = .;
- . = ALIGN(0x4);
- audiobuffer = .;
- } > DRAM
-
- .audiobufend ENDAUDIOADDR (NOLOAD) :
- {
- audiobufend = .;
- _audiobufend = .;
- } > DRAM
-
- .codec ENDAUDIOADDR (NOLOAD) :
- {
- codecbuf = .;
- _codecbuf = .;
- }
-
- .plugin ENDADDR (NOLOAD) :
- {
- _pluginbuf = .;
- pluginbuf = .;
- }
-}
+#include "../pp/app-pp.lds"
diff --git a/firmware/target/arm/pbell/boot.lds b/firmware/target/arm/pbell/boot.lds
index 9a42569aea..33b826bec8 100644
--- a/firmware/target/arm/pbell/boot.lds
+++ b/firmware/target/arm/pbell/boot.lds
@@ -1,64 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp-bl.o)
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000)
-
-#define DRAMORIG 0x10000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0x18000
-#define FLASHORIG 0x001f0000
-#define FLASHSIZE 2M
-
-MEMORY
-{
- DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
- IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
-}
-
-SECTIONS
-{
- . = IRAMORIG;
-
- .text : {
- *(.init.text)
- *(.text*)
- *(.glue_7)
- *(.glue_7t)
- } > IRAM
-
- .data : {
- *(.icode)
- *(.irodata)
- *(.idata)
- *(.data*)
- *(.ncdata*)
- *(.rodata*)
- _dataend = . ;
- } > IRAM
-
- .stack (NOLOAD) : {
- *(.stack)
- _stackbegin = .;
- stackbegin = .;
- . += 0x2000;
- _stackend = .;
- stackend = .;
- } > IRAM
-
- /* The bss section is too large for IRAM - we just move it 16MB into the
- DRAM */
-
- . = DRAMORIG;
- .bss . + (16*1024*1024) (NOLOAD) : {
- _edata = .;
- *(.bss*);
- *(.ibss);
- *(COMMON)
- *(.ncbss*);
- _end = .;
- } > DRAM
-}
+#include "../pp/boot-pp.lds"
diff --git a/firmware/target/arm/philips/app.lds b/firmware/target/arm/philips/app.lds
index 30e5962b82..856cc52bb0 100644
--- a/firmware/target/arm/philips/app.lds
+++ b/firmware/target/arm/philips/app.lds
@@ -1,196 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp.o)
-
-#define PLUGINSIZE PLUGIN_BUFFER_SIZE
-#define CODECSIZE CODEC_SIZE
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - CODECSIZE
-
-#define DRAMORIG 0x00000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0xc000
-
-#ifdef CPU_PP502x
-#define NOCACHE_BASE 0x10000000
-#else
-#define NOCACHE_BASE 0x28000000
-#endif
-
-#define CACHEALIGN_SIZE 16
-
-/* 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);
- } > DRAM
-
- .data :
- {
- *(.data*)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- /* .ncdata section is placed at uncached physical alias address and is
- * loaded at the proper cached virtual address - no copying is
- * performed in the init code */
- .ncdata . + NOCACHE_BASE :
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncdata*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /DISCARD/ :
- {
- *(.eh_frame)
- }
-
- .vectors 0x0 :
- {
- _vectorsstart = .;
- KEEP(*(.vectors));
- _vectorsend = .;
- } AT> DRAM
-
- _vectorscopy = LOADADDR(.vectors);
- _noloaddram = LOADADDR(.vectors);
-
- .ibss IRAMORIG (NOLOAD) :
- {
- _iedata = .;
- *(.qharray)
- *(.ibss)
- . = ALIGN(0x4);
- _iend = .;
- } > IRAM
-
- .iram _iend :
- {
- _iramstart = .;
- *(.icode)
- *(.irodata)
- *(.idata)
- . = ALIGN(0x4);
- _iramend = .;
- } > IRAM AT> DRAM
-
- _iramcopy = LOADADDR(.iram);
-
-
- .init ENDAUDIOADDR :
- {
- . = ALIGN(4);
- _initstart = .;
- *(.init*)
- _initend = .;
- } AT> DRAM
-
- _initcopy = LOADADDR(.init);
-
- .idle_stacks (NOLOAD) :
- {
- *(.idle_stacks)
-#if NUM_CORES > 1
- cpu_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cpu_idlestackend = .;
-#endif
- cop_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cop_idlestackend = .;
- } > IRAM
-
- .stack (NOLOAD) :
- {
- *(.stack)
- stackbegin = .;
- . += 0x2000;
- stackend = .;
- } > IRAM
-
- /* .bss and .ncbss are treated as a single section to use one init loop to
- * zero it - note "_edata" and "_end" */
- .bss _noloaddram (NOLOAD) :
- {
- _edata = .;
- *(.bss*)
- *(COMMON)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- .ncbss . + NOCACHE_BASE (NOLOAD):
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncbss*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /* This will be aligned by preceding alignments */
- .endaddr . - NOCACHE_BASE (NOLOAD) :
- {
- _end = .;
- } > DRAM
-
- .audiobuf (NOLOAD) :
- {
- _audiobuffer = .;
- . = ALIGN(0x4);
- audiobuffer = .;
- } > DRAM
-
- .audiobufend ENDAUDIOADDR (NOLOAD) :
- {
- audiobufend = .;
- _audiobufend = .;
- } > DRAM
-
- .codec ENDAUDIOADDR (NOLOAD) :
- {
- codecbuf = .;
- _codecbuf = .;
- }
-
- .plugin ENDADDR (NOLOAD) :
- {
- _pluginbuf = .;
- pluginbuf = .;
- }
-}
+#include "../pp/app-pp.lds"
diff --git a/firmware/target/arm/philips/boot.lds b/firmware/target/arm/philips/boot.lds
index 45a9c6efa8..5a6fa000ad 100644
--- a/firmware/target/arm/philips/boot.lds
+++ b/firmware/target/arm/philips/boot.lds
@@ -3,69 +3,6 @@
/* Can't link all Philips ARM devices the same way at this time */
#ifdef HAVE_BOOTLOADER_USB_MODE
#include "../pp/boot-pp502x-bl-usb.lds"
-#else /* !HAVE_BOOTLOADER_USB_MODE */
-ENTRY(start)
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp-bl.o)
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000)
-
-#define DRAMORIG 0x10000000
-#ifndef IRAMORIG
-#define IRAMORIG 0x40000000
+#else
+#include "../pp/boot-pp.lds"
#endif
-#define IRAMSIZE 0x20000
-#define FLASHORIG 0x001f0000
-#define FLASHSIZE 2M
-
-MEMORY
-{
- DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
- IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
-}
-
-SECTIONS
-{
- . = IRAMORIG;
-
- .text : {
- *(.init.text)
- *(.text*)
- *(.glue_7)
- *(.glue_7t)
- } > IRAM
-
- .data : {
- *(.icode)
- *(.irodata)
- *(.idata)
- *(.data*)
- *(.ncdata*)
- *(.rodata*)
- _dataend = . ;
- } > IRAM
-
- .stack (NOLOAD) : {
- *(.stack)
- _stackbegin = .;
- stackbegin = .;
- . += 0x2000;
- _stackend = .;
- stackend = .;
- } > IRAM
-
- /* The bss section is too large for IRAM - we just move it 16MB into the
- DRAM */
-
- . = DRAMORIG;
- .bss . + (16*1024*1024) (NOLOAD) : {
- _edata = .;
- *(.bss*);
- *(.ibss);
- *(COMMON)
- *(.ncbss*);
- _end = .;
- } > DRAM
-}
-#endif /* HAVE_BOOTLOADER_USB_MODE */
diff --git a/firmware/target/arm/pp/app-pp.lds b/firmware/target/arm/pp/app-pp.lds
new file mode 100644
index 0000000000..e6c2b255dd
--- /dev/null
+++ b/firmware/target/arm/pp/app-pp.lds
@@ -0,0 +1,199 @@
+/* Will have been included from app.lds */
+ENTRY(start)
+
+OUTPUT_FORMAT(elf32-littlearm)
+OUTPUT_ARCH(arm)
+STARTUP(target/arm/pp/crt0-pp.o)
+
+#define PLUGINSIZE PLUGIN_BUFFER_SIZE
+#define CODECSIZE CODEC_SIZE
+
+#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - CODECSIZE
+
+#define DRAMORIG 0x00000000
+#define IRAMORIG 0x40000000
+#define IRAMSIZE 0xc000
+
+#ifdef CPU_PP502x
+#define NOCACHE_BASE 0x10000000
+#else
+#define NOCACHE_BASE 0x28000000
+#endif
+
+#define CACHEALIGN_SIZE 16
+
+/* 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);
+ } > DRAM
+
+ .data :
+ {
+ *(.data*)
+ . = ALIGN(0x4);
+ } > DRAM
+
+#if NOCACHE_BASE != 0
+ /* .ncdata section is placed at uncached physical alias address and is
+ * loaded at the proper cached virtual address - no copying is
+ * performed in the init code */
+ .ncdata . + NOCACHE_BASE :
+ {
+ . = ALIGN(CACHEALIGN_SIZE);
+ *(.ncdata*)
+ . = ALIGN(CACHEALIGN_SIZE);
+ } AT> DRAM
+#endif
+
+ /DISCARD/ :
+ {
+ *(.eh_frame)
+ }
+
+ .vectors 0x0 :
+ {
+ _vectorsstart = .;
+ KEEP(*(.vectors));
+ _vectorsend = .;
+ } AT> DRAM
+
+ _vectorscopy = LOADADDR(.vectors);
+ _noloaddram = LOADADDR(.vectors);
+
+ .ibss IRAMORIG (NOLOAD) :
+ {
+ _iedata = .;
+ *(.qharray)
+ *(.ibss*)
+ . = ALIGN(0x4);
+ _iend = .;
+ } > IRAM
+
+ .iram _iend :
+ {
+ _iramstart = .;
+ *(.icode*)
+ *(.irodata*)
+ *(.idata*)
+ . = ALIGN(0x4);
+ _iramend = .;
+ } > IRAM AT> DRAM
+
+ _iramcopy = LOADADDR(.iram);
+
+
+ .init ENDAUDIOADDR :
+ {
+ . = ALIGN(4);
+ _initstart = .;
+ *(.init*)
+ _initend = .;
+ } AT> DRAM
+
+ _initcopy = LOADADDR(.init);
+
+ .idle_stacks (NOLOAD) :
+ {
+ *(.idle_stacks)
+#if NUM_CORES > 1
+ cpu_idlestackbegin = .;
+ . += IDLE_STACK_SIZE;
+ cpu_idlestackend = .;
+#endif
+ cop_idlestackbegin = .;
+ . += IDLE_STACK_SIZE;
+ cop_idlestackend = .;
+ } > IRAM
+
+ .stack (NOLOAD) :
+ {
+ *(.stack)
+ stackbegin = .;
+ . += 0x2000;
+ stackend = .;
+ } > IRAM
+
+ /* .bss and .ncbss are treated as a single section to use one init loop to
+ * zero it - note "_edata" and "_end" */
+ .bss _noloaddram (NOLOAD) :
+ {
+ _edata = .;
+ *(.bss*)
+ *(COMMON)
+ . = ALIGN(0x4);
+ } > DRAM
+
+#if NOCACHE_BASE != 0
+ .ncbss . + NOCACHE_BASE (NOLOAD):
+ {
+ . = ALIGN(CACHEALIGN_SIZE);
+ *(.ncbss*)
+ . = ALIGN(CACHEALIGN_SIZE);
+ } AT> DRAM
+#endif
+
+ /* This will be aligned by preceding alignments */
+ .endaddr . - NOCACHE_BASE (NOLOAD) :
+ {
+ _end = .;
+ } > DRAM
+
+ .audiobuf (NOLOAD) :
+ {
+ _audiobuffer = .;
+ . = ALIGN(0x4);
+ audiobuffer = .;
+ } > DRAM
+
+ .audiobufend ENDAUDIOADDR (NOLOAD) :
+ {
+#ifdef IPOD_VIDEO
+ audiobufend_lds = .;
+#else
+ audiobufend = .;
+#endif
+ _audiobufend = .;
+ } > DRAM
+
+ .codec ENDAUDIOADDR (NOLOAD) :
+ {
+ codecbuf = .;
+ _codecbuf = .;
+ }
+
+ .plugin ENDADDR (NOLOAD) :
+ {
+ _pluginbuf = .;
+ pluginbuf = .;
+ }
+}
diff --git a/firmware/target/arm/pp/boot-pp.lds b/firmware/target/arm/pp/boot-pp.lds
new file mode 100644
index 0000000000..602c3bf7ab
--- /dev/null
+++ b/firmware/target/arm/pp/boot-pp.lds
@@ -0,0 +1,92 @@
+#include "config.h"
+
+ENTRY(start)
+OUTPUT_FORMAT(elf32-littlearm)
+OUTPUT_ARCH(arm)
+STARTUP(target/arm/pp/crt0-pp-bl.o)
+
+#define DRAMSIZE (MEMORYSIZE * 0x100000)
+
+#if CONFIG_CPU == PP6100
+#define DRAMORIG 0x10f00000
+#ifndef IRAMORIG
+#define IRAMORIG 0x40000000
+#endif
+#define IRAMSIZE 0x20000
+#define FLASHORIG 0x001f0000
+#define FLASHSIZE 2M
+#if CONFIG_CPU == PP5020
+#define DRAMORIG 0x10000000
+#define IRAMORIG 0x40000000
+#define IRAMSIZE 0x18000
+#define FLASHORIG 0x001f0000
+#define FLASHSIZE 2M
+#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024)
+#define DRAMORIG 0x10000000
+#ifndef IRAMORIG
+#define IRAMORIG 0x40000000
+#endif
+#define IRAMSIZE 0x20000
+#define FLASHORIG 0x001f0000
+#define FLASHSIZE 2M
+#elif CONFIG_CPU == PP5002
+#define DRAMORIG 0x28000000
+#define IRAMORIG 0x40000000
+#define IRAMSIZE 0x18000
+#define FLASHORIG 0x001f0000
+#define FLASHSIZE 2M
+#endif
+
+MEMORY
+{
+ DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
+ IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
+}
+
+SECTIONS
+{
+#ifdef SANSA_PP_ERASE
+ . = IRAMORIG+0x4000;
+#else
+ . = IRAMORIG;
+#endif
+
+ .text : {
+ *(.init.text)
+ *(.text*)
+ *(.glue_7)
+ *(.glue_7t)
+ } > IRAM
+
+ .data : {
+ *(.icode)
+ *(.irodata)
+ *(.idata)
+ *(.data*)
+ *(.ncdata*)
+ *(.rodata*)
+ _dataend = . ;
+ } > IRAM
+
+ .stack (NOLOAD) : {
+ *(.stack)
+ _stackbegin = .;
+ stackbegin = .;
+ . += 0x2000;
+ _stackend = .;
+ stackend = .;
+ } > IRAM
+
+ /* The bss section is too large for IRAM - we just move it 16MB into the
+ DRAM */
+
+ . = DRAMORIG;
+ .bss . + (16*1024*1024) (NOLOAD) : {
+ _edata = .;
+ *(.bss*);
+ *(.ibss);
+ *(COMMON)
+ *(.ncbss*);
+ _end = .;
+ } > DRAM
+}
diff --git a/firmware/target/arm/samsung/app.lds b/firmware/target/arm/samsung/app.lds
index 30e5962b82..856cc52bb0 100644
--- a/firmware/target/arm/samsung/app.lds
+++ b/firmware/target/arm/samsung/app.lds
@@ -1,196 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp.o)
-
-#define PLUGINSIZE PLUGIN_BUFFER_SIZE
-#define CODECSIZE CODEC_SIZE
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - CODECSIZE
-
-#define DRAMORIG 0x00000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0xc000
-
-#ifdef CPU_PP502x
-#define NOCACHE_BASE 0x10000000
-#else
-#define NOCACHE_BASE 0x28000000
-#endif
-
-#define CACHEALIGN_SIZE 16
-
-/* 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);
- } > DRAM
-
- .data :
- {
- *(.data*)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- /* .ncdata section is placed at uncached physical alias address and is
- * loaded at the proper cached virtual address - no copying is
- * performed in the init code */
- .ncdata . + NOCACHE_BASE :
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncdata*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /DISCARD/ :
- {
- *(.eh_frame)
- }
-
- .vectors 0x0 :
- {
- _vectorsstart = .;
- KEEP(*(.vectors));
- _vectorsend = .;
- } AT> DRAM
-
- _vectorscopy = LOADADDR(.vectors);
- _noloaddram = LOADADDR(.vectors);
-
- .ibss IRAMORIG (NOLOAD) :
- {
- _iedata = .;
- *(.qharray)
- *(.ibss)
- . = ALIGN(0x4);
- _iend = .;
- } > IRAM
-
- .iram _iend :
- {
- _iramstart = .;
- *(.icode)
- *(.irodata)
- *(.idata)
- . = ALIGN(0x4);
- _iramend = .;
- } > IRAM AT> DRAM
-
- _iramcopy = LOADADDR(.iram);
-
-
- .init ENDAUDIOADDR :
- {
- . = ALIGN(4);
- _initstart = .;
- *(.init*)
- _initend = .;
- } AT> DRAM
-
- _initcopy = LOADADDR(.init);
-
- .idle_stacks (NOLOAD) :
- {
- *(.idle_stacks)
-#if NUM_CORES > 1
- cpu_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cpu_idlestackend = .;
-#endif
- cop_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cop_idlestackend = .;
- } > IRAM
-
- .stack (NOLOAD) :
- {
- *(.stack)
- stackbegin = .;
- . += 0x2000;
- stackend = .;
- } > IRAM
-
- /* .bss and .ncbss are treated as a single section to use one init loop to
- * zero it - note "_edata" and "_end" */
- .bss _noloaddram (NOLOAD) :
- {
- _edata = .;
- *(.bss*)
- *(COMMON)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- .ncbss . + NOCACHE_BASE (NOLOAD):
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncbss*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /* This will be aligned by preceding alignments */
- .endaddr . - NOCACHE_BASE (NOLOAD) :
- {
- _end = .;
- } > DRAM
-
- .audiobuf (NOLOAD) :
- {
- _audiobuffer = .;
- . = ALIGN(0x4);
- audiobuffer = .;
- } > DRAM
-
- .audiobufend ENDAUDIOADDR (NOLOAD) :
- {
- audiobufend = .;
- _audiobufend = .;
- } > DRAM
-
- .codec ENDAUDIOADDR (NOLOAD) :
- {
- codecbuf = .;
- _codecbuf = .;
- }
-
- .plugin ENDADDR (NOLOAD) :
- {
- _pluginbuf = .;
- pluginbuf = .;
- }
-}
+#include "../pp/app-pp.lds"
diff --git a/firmware/target/arm/samsung/boot.lds b/firmware/target/arm/samsung/boot.lds
index 9a42569aea..33b826bec8 100644
--- a/firmware/target/arm/samsung/boot.lds
+++ b/firmware/target/arm/samsung/boot.lds
@@ -1,64 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp-bl.o)
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000)
-
-#define DRAMORIG 0x10000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0x18000
-#define FLASHORIG 0x001f0000
-#define FLASHSIZE 2M
-
-MEMORY
-{
- DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
- IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
-}
-
-SECTIONS
-{
- . = IRAMORIG;
-
- .text : {
- *(.init.text)
- *(.text*)
- *(.glue_7)
- *(.glue_7t)
- } > IRAM
-
- .data : {
- *(.icode)
- *(.irodata)
- *(.idata)
- *(.data*)
- *(.ncdata*)
- *(.rodata*)
- _dataend = . ;
- } > IRAM
-
- .stack (NOLOAD) : {
- *(.stack)
- _stackbegin = .;
- stackbegin = .;
- . += 0x2000;
- _stackend = .;
- stackend = .;
- } > IRAM
-
- /* The bss section is too large for IRAM - we just move it 16MB into the
- DRAM */
-
- . = DRAMORIG;
- .bss . + (16*1024*1024) (NOLOAD) : {
- _edata = .;
- *(.bss*);
- *(.ibss);
- *(COMMON)
- *(.ncbss*);
- _end = .;
- } > DRAM
-}
+#include "../pp/boot-pp.lds"
diff --git a/firmware/target/arm/sandisk/app.lds b/firmware/target/arm/sandisk/app.lds
index a4b68ba994..856cc52bb0 100644
--- a/firmware/target/arm/sandisk/app.lds
+++ b/firmware/target/arm/sandisk/app.lds
@@ -1,193 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp.o)
-
-#define PLUGINSIZE PLUGIN_BUFFER_SIZE
-#define CODECSIZE CODEC_SIZE
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - CODECSIZE
-
-#define DRAMORIG 0x00000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0xc000
-
-#ifdef CPU_PP502x
-#define NOCACHE_BASE 0x10000000
-#else
-#define NOCACHE_BASE 0x28000000
-#endif
-
-#define CACHEALIGN_SIZE 16
-
-/* 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*)
- . = ALIGN(0x4);
- } > DRAM
-
- .data :
- {
- *(.data*)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- /* .ncdata section is placed at uncached physical alias address and is
- * loaded at the proper cached virtual address - no copying is
- * performed in the init code */
- .ncdata . + NOCACHE_BASE :
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncdata*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /DISCARD/ :
- {
- *(.eh_frame)
- }
-
- .vectors 0x0 :
- {
- _vectorsstart = .;
- KEEP(*(.vectors));
- _vectorsend = .;
- } AT> DRAM
-
- _vectorscopy = LOADADDR(.vectors);
- _noloaddram = LOADADDR(.vectors);
-
- .ibss IRAMORIG (NOLOAD) :
- {
- _iedata = .;
- *(.qharray)
- *(.ibss*)
- . = ALIGN(0x4);
- _iend = .;
- } > IRAM
-
- .iram _iend :
- {
- _iramstart = .;
- *(.icode*)
- *(.irodata*)
- *(.idata*)
- . = ALIGN(0x4);
- _iramend = .;
- } > IRAM AT> DRAM
-
- _iramcopy = LOADADDR(.iram);
-
-
- .init ENDAUDIOADDR :
- {
- . = ALIGN(4);
- _initstart = .;
- *(.init*)
- _initend = .;
- } AT> DRAM
-
- _initcopy = LOADADDR(.init);
-
- .idle_stacks (NOLOAD) :
- {
- *(.idle_stacks)
-#if NUM_CORES > 1
- cpu_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cpu_idlestackend = .;
-#endif
- cop_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cop_idlestackend = .;
- } > IRAM
-
- .stack (NOLOAD) :
- {
- *(.stack)
- stackbegin = .;
- . += 0x2000;
- stackend = .;
- } > IRAM
-
- /* .bss and .ncbss are treated as a single section to use one init loop to
- * zero it - note "_edata" and "_end" */
- .bss _noloaddram (NOLOAD) :
- {
- _edata = .;
- *(.bss*)
- *(COMMON)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- .ncbss . + NOCACHE_BASE (NOLOAD):
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncbss*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /* This will be aligned by preceding alignments */
- .endaddr . - NOCACHE_BASE (NOLOAD) :
- {
- _end = .;
- } > DRAM
-
- .audiobuf (NOLOAD) :
- {
- _audiobuffer = .;
- . = ALIGN(0x4);
- audiobuffer = .;
- } > DRAM
-
- .audiobufend ENDAUDIOADDR (NOLOAD) :
- {
- audiobufend = .;
- _audiobufend = .;
- } > DRAM
-
- .codec ENDAUDIOADDR (NOLOAD) :
- {
- codecbuf = .;
- _codecbuf = .;
- }
-
- .plugin ENDADDR (NOLOAD) :
- {
- _pluginbuf = .;
- pluginbuf = .;
- }
-}
+#include "../pp/app-pp.lds"
diff --git a/firmware/target/arm/sandisk/boot.lds b/firmware/target/arm/sandisk/boot.lds
index a4ea28ab8c..4586c09e20 100644
--- a/firmware/target/arm/sandisk/boot.lds
+++ b/firmware/target/arm/sandisk/boot.lds
@@ -3,79 +3,6 @@
/* Can't link all Sansa PP devices the same way at this time */
#ifdef HAVE_BOOTLOADER_USB_MODE
#include "../pp/boot-pp502x-bl-usb.lds"
-#else /* !HAVE_BOOTLOADER_USB_MODE */
-
-ENTRY(start)
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp-bl.o)
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000)
-
-#ifdef SANSA_VIEW
-#define DRAMORIG 0x10f00000
-#else
-#define DRAMORIG 0x10000000
-#endif
-
-#ifndef IRAMORIG
-#define IRAMORIG 0x40000000
-#endif
-#define IRAMSIZE 0x20000
-#define FLASHORIG 0x001f0000
-#define FLASHSIZE 2M
-
-MEMORY
-{
- DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
- IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
-}
-
-SECTIONS
-{
-#ifdef SANSA_PP_ERASE
- . = IRAMORIG+0x4000;
#else
- . = IRAMORIG;
-#endif
-
- .text : {
- *(.init.text)
- *(.text*)
- *(.glue_7)
- *(.glue_7t)
- } > IRAM
-
- .data : {
- *(.icode)
- *(.irodata)
- *(.idata)
- *(.data*)
- *(.ncdata*)
- *(.rodata*)
- _dataend = . ;
- } > IRAM
-
- .stack (NOLOAD) : {
- *(.stack)
- _stackbegin = .;
- stackbegin = .;
- . += 0x2000;
- _stackend = .;
- stackend = .;
- } > IRAM
-
- /* The bss section is too large for IRAM - we just move it 16MB into the
- DRAM */
-
- . = DRAMORIG;
- .bss . + (16*1024*1024) (NOLOAD) : {
- _edata = .;
- *(.bss*);
- *(.ibss);
- *(COMMON)
- *(.ncbss*);
- _end = .;
- } > DRAM
-}
-#endif /* HAVE_BOOTLOADER_USB_MODE */
+#include "../pp/boot-pp.lds"
+#endif \ No newline at end of file
diff --git a/firmware/target/arm/tatung/app.lds b/firmware/target/arm/tatung/app.lds
index 4752e40ab7..856cc52bb0 100644
--- a/firmware/target/arm/tatung/app.lds
+++ b/firmware/target/arm/tatung/app.lds
@@ -1,184 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp.o)
-
-#define PLUGINSIZE PLUGIN_BUFFER_SIZE
-#define CODECSIZE CODEC_SIZE
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - CODECSIZE
-
-#define DRAMORIG 0x00000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0xc000
-
-#ifdef CPU_PP502x
-#define NOCACHE_BASE 0x10000000
-#else
-#define NOCACHE_BASE 0x28000000
-#endif
-
-#define CACHEALIGN_SIZE 16
-
-/* 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);
- } > DRAM
-
- .data :
- {
- *(.data*)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- /* .ncdata section is placed at uncached physical alias address and is
- * loaded at the proper cached virtual address - no copying is
- * performed in the init code */
- .ncdata . + NOCACHE_BASE :
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncdata*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /DISCARD/ :
- {
- *(.eh_frame)
- }
-
- .vectors 0x0 :
- {
- _vectorsstart = .;
- KEEP(*(.vectors));
- _vectorsend = .;
- } AT> DRAM
-
- _vectorscopy = LOADADDR(.vectors);
-
- .ibss IRAMORIG (NOLOAD) :
- {
- _iedata = .;
- *(.qharray)
- *(.ibss)
- . = ALIGN(0x4);
- _iend = .;
- } > IRAM
-
- .iram _iend :
- {
- _iramstart = .;
- *(.icode)
- *(.irodata)
- *(.idata)
- . = ALIGN(0x4);
- _iramend = .;
- } > IRAM AT> DRAM
-
- _iramcopy = LOADADDR(.iram);
-
- .idle_stacks (NOLOAD) :
- {
- *(.idle_stacks)
-#if NUM_CORES > 1
- cpu_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cpu_idlestackend = .;
-#endif
- cop_idlestackbegin = .;
- . += IDLE_STACK_SIZE;
- cop_idlestackend = .;
- } > IRAM
-
- .stack (NOLOAD) :
- {
- *(.stack)
- stackbegin = .;
- . += 0x2000;
- stackend = .;
- } > IRAM
-
- /* .bss and .ncbss are treated as a single section to use one init loop to
- * zero it - note "_edata" and "_end" */
- .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.ncdata) +\
- SIZEOF(.iram) + SIZEOF(.vectors) (NOLOAD) :
- {
- _edata = .;
- *(.bss*)
- *(COMMON)
- . = ALIGN(0x4);
- } > DRAM
-
-#if NOCACHE_BASE != 0
- .ncbss . + NOCACHE_BASE (NOLOAD):
- {
- . = ALIGN(CACHEALIGN_SIZE);
- *(.ncbss*)
- . = ALIGN(CACHEALIGN_SIZE);
- } AT> DRAM
-#endif
-
- /* This will be aligned by preceding alignments */
- .endaddr . - NOCACHE_BASE (NOLOAD) :
- {
- _end = .;
- } > DRAM
-
- .audiobuf (NOLOAD) :
- {
- _audiobuffer = .;
- audiobuffer = .;
- } > DRAM
-
- .audiobufend ENDAUDIOADDR (NOLOAD) :
- {
- audiobufend = .;
- _audiobufend = .;
- } > DRAM
-
- .codec ENDAUDIOADDR (NOLOAD) :
- {
- codecbuf = .;
- _codecbuf = .;
- }
-
- .plugin ENDADDR (NOLOAD) :
- {
- _pluginbuf = .;
- pluginbuf = .;
- }
-}
+#include "../pp/app-pp.lds"
diff --git a/firmware/target/arm/tatung/boot.lds b/firmware/target/arm/tatung/boot.lds
index 98d9cb62fe..33b826bec8 100644
--- a/firmware/target/arm/tatung/boot.lds
+++ b/firmware/target/arm/tatung/boot.lds
@@ -1,64 +1,2 @@
#include "config.h"
-
-ENTRY(start)
-OUTPUT_FORMAT(elf32-littlearm)
-OUTPUT_ARCH(arm)
-STARTUP(target/arm/pp/crt0-pp-bl.o)
-
-#define DRAMSIZE (MEMORYSIZE * 0x100000)
-
-#define DRAMORIG 0x10000000
-#define IRAMORIG 0x40000000
-#define IRAMSIZE 0x18000
-#define FLASHORIG 0x001f0000
-#define FLASHSIZE 2M
-
-MEMORY
-{
- DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
- IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
-}
-
-SECTIONS
-{
- . = IRAMORIG;
-
- .text : {
- *(.init.text)
- *(.text*)
- *(.glue_7)
- *(.glue_7t)
- } > IRAM
-
- .data : {
- *(.icode)
- *(.irodata)
- *(.idata)
- *(.data*)
- *(.ncdata*)
- *(.rodata*)
- _dataend = . ;
- } > IRAM
-
- .stack (NOLOAD) : {
- *(.stack)
- _stackbegin = .;
- stackbegin = .;
- . += 0x2000;
- _stackend = .;
- stackend = .;
- } > IRAM
-
- /* The bss section is too large for IRAM - we just move it 16MB into the
- DRAM */
-
- . = DRAMORIG;
- .bss . + (16*1024*1024) (NOLOAD) : {
- _edata = .;
- *(.bss*);
- *(.ibss);
- *(COMMON)
- *(.ncbss*);
- _end = .;
- } > DRAM
-}
+#include "../pp/boot-pp.lds"