summaryrefslogtreecommitdiff
path: root/firmware/target
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target')
-rw-r--r--firmware/target/arm/imx31/boot.lds84
-rw-r--r--firmware/target/arm/ipod/boot.lds69
-rw-r--r--firmware/target/arm/iriver/boot.lds53
-rw-r--r--firmware/target/arm/olympus/boot.lds53
-rw-r--r--firmware/target/arm/s3c2440/boot.lds50
-rw-r--r--firmware/target/arm/sandisk/boot.lds56
-rw-r--r--firmware/target/arm/tcc77x/boot.lds62
-rw-r--r--firmware/target/arm/tcc780x/boot.lds62
-rw-r--r--firmware/target/arm/tms320dm320/boot.lds87
-rw-r--r--firmware/target/coldfire/iaudio/boot.lds90
-rw-r--r--firmware/target/coldfire/iriver/boot.lds89
-rw-r--r--firmware/target/sh/archos/boot.lds81
12 files changed, 836 insertions, 0 deletions
diff --git a/firmware/target/arm/imx31/boot.lds b/firmware/target/arm/imx31/boot.lds
new file mode 100644
index 0000000000..84597d5ad1
--- /dev/null
+++ b/firmware/target/arm/imx31/boot.lds
@@ -0,0 +1,84 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-littlearm)
5OUTPUT_ARCH(arm)
6INPUT(target/arm/imx31/crt0.o)
7
8#define DRAMSIZE (1 << 20) /* Limit 1 MB for bootloader */
9
10#define DRAMORIG (0x02000000-0x00100000)
11#define IRAM DRAM
12#define IRAMORIG 0x1FFFC000
13#define IRAMSIZE 16K
14#define FLASHORIG 0x0000000
15#define FLASHSIZE 1M
16
17MEMORY
18{
19 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
20}
21
22SECTIONS
23{
24 . = DRAMORIG;
25
26 .text :
27 {
28 *(.init.text)
29 *(.text*)
30 *(.icode)
31 *(.glue_7)
32 *(.glue_7t)
33 . = ALIGN(0x4);
34 } > DRAM
35
36 .rodata :
37 {
38 *(.rodata) /* problems without this, dunno why */
39 *(.rodata*)
40 *(.rodata.str1.1)
41 *(.rodata.str1.4)
42 . = ALIGN(0x4);
43
44 /* Pseudo-allocate the copies of the data sections */
45 _datacopy = .;
46 } > DRAM
47
48 .data :
49 {
50 *(.irodata)
51 *(.idata)
52 *(.data*)
53 . = ALIGN(0x4);
54 _dataend = . ;
55 } > DRAM
56
57 .stack :
58 {
59 *(.stack)
60 _stackbegin = .;
61 stackbegin = .;
62 . += 0x2000;
63 _stackend = .;
64 stackend = .;
65 } > IRAM
66
67 .bss :
68 {
69 _edata = .;
70 *(.bss*);
71 *(.ibss);
72 *(COMMON)
73 _end = .;
74 } > DRAM
75
76 .vectors 0x0 :
77 {
78 _vectorsstart = .;
79 *(.vectors);
80 KEEP(*(.vectors));
81 _vectorsend = .;
82 } AT > DRAM
83 _vectorscopy = LOADADDR(.vectors);
84}
diff --git a/firmware/target/arm/ipod/boot.lds b/firmware/target/arm/ipod/boot.lds
new file mode 100644
index 0000000000..2f2f4f91a1
--- /dev/null
+++ b/firmware/target/arm/ipod/boot.lds
@@ -0,0 +1,69 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-littlearm)
5OUTPUT_ARCH(arm)
6INPUT(target/arm/crt0-pp-bl.o)
7
8#define DRAMSIZE (MEMORYSIZE * 0x100000)
9
10#if CONFIG_CPU == PP5020
11#define DRAMORIG 0x10000000
12#define IRAMORIG 0x40000000
13#define IRAMSIZE 0x18000
14#define FLASHORIG 0x001f0000
15#define FLASHSIZE 2M
16#elif (CONFIG_CPU == PP5022) || (CONFIG_CPU == PP5024)
17#define DRAMORIG 0x10000000
18#ifndef IRAMORIG
19#define IRAMORIG 0x40000000
20#endif
21#define IRAMSIZE 0x20000
22#define FLASHORIG 0x001f0000
23#define FLASHSIZE 2M
24#elif CONFIG_CPU == PP5002
25#define DRAMORIG 0x28000000
26#define IRAMORIG 0x40000000
27#define IRAMSIZE 0x18000
28#define FLASHORIG 0x001f0000
29#define FLASHSIZE 2M
30#endif
31
32SECTIONS
33{
34 . = IRAMORIG;
35
36 .text : {
37 *(.init.text)
38 *(.text*)
39 }
40
41 .data : {
42 *(.icode)
43 *(.irodata)
44 *(.idata)
45 *(.data*)
46 _dataend = . ;
47 }
48
49 .stack :
50 {
51 *(.stack)
52 _stackbegin = .;
53 stackbegin = .;
54 . += 0x2000;
55 _stackend = .;
56 stackend = .;
57 }
58
59 /* The bss section is too large for IRAM - we just move it 16MB into the
60 DRAM */
61
62 . = (DRAMORIG+16*1024*1024);
63 .bss : {
64 _edata = .;
65 *(.bss*);
66 *(.ibss);
67 _end = .;
68 }
69}
diff --git a/firmware/target/arm/iriver/boot.lds b/firmware/target/arm/iriver/boot.lds
new file mode 100644
index 0000000000..5fbe999333
--- /dev/null
+++ b/firmware/target/arm/iriver/boot.lds
@@ -0,0 +1,53 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-littlearm)
5OUTPUT_ARCH(arm)
6INPUT(target/arm/crt0-pp-bl.o)
7
8#define DRAMSIZE (MEMORYSIZE * 0x100000)
9
10#define DRAMORIG 0x10000000
11#define IRAMORIG 0x40000000
12#define IRAMSIZE 0x18000
13#define FLASHORIG 0x001f0000
14#define FLASHSIZE 2M
15
16SECTIONS
17{
18 . = IRAMORIG;
19
20 .text : {
21 *(.init.text)
22 *(.text*)
23 }
24
25 .data : {
26 *(.icode)
27 *(.irodata)
28 *(.idata)
29 *(.data*)
30 _dataend = . ;
31 }
32
33 .stack :
34 {
35 *(.stack)
36 _stackbegin = .;
37 stackbegin = .;
38 . += 0x2000;
39 _stackend = .;
40 stackend = .;
41 }
42
43 /* The bss section is too large for IRAM - we just move it 16MB into the
44 DRAM */
45
46 . = (DRAMORIG+16*1024*1024);
47 .bss : {
48 _edata = .;
49 *(.bss*);
50 *(.ibss);
51 _end = .;
52 }
53}
diff --git a/firmware/target/arm/olympus/boot.lds b/firmware/target/arm/olympus/boot.lds
new file mode 100644
index 0000000000..5fbe999333
--- /dev/null
+++ b/firmware/target/arm/olympus/boot.lds
@@ -0,0 +1,53 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-littlearm)
5OUTPUT_ARCH(arm)
6INPUT(target/arm/crt0-pp-bl.o)
7
8#define DRAMSIZE (MEMORYSIZE * 0x100000)
9
10#define DRAMORIG 0x10000000
11#define IRAMORIG 0x40000000
12#define IRAMSIZE 0x18000
13#define FLASHORIG 0x001f0000
14#define FLASHSIZE 2M
15
16SECTIONS
17{
18 . = IRAMORIG;
19
20 .text : {
21 *(.init.text)
22 *(.text*)
23 }
24
25 .data : {
26 *(.icode)
27 *(.irodata)
28 *(.idata)
29 *(.data*)
30 _dataend = . ;
31 }
32
33 .stack :
34 {
35 *(.stack)
36 _stackbegin = .;
37 stackbegin = .;
38 . += 0x2000;
39 _stackend = .;
40 stackend = .;
41 }
42
43 /* The bss section is too large for IRAM - we just move it 16MB into the
44 DRAM */
45
46 . = (DRAMORIG+16*1024*1024);
47 .bss : {
48 _edata = .;
49 *(.bss*);
50 *(.ibss);
51 _end = .;
52 }
53}
diff --git a/firmware/target/arm/s3c2440/boot.lds b/firmware/target/arm/s3c2440/boot.lds
new file mode 100644
index 0000000000..cc20fbe86f
--- /dev/null
+++ b/firmware/target/arm/s3c2440/boot.lds
@@ -0,0 +1,50 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-littlearm)
5OUTPUT_ARCH(arm)
6INPUT(target/arm/s3c2440/crt0.o)
7
8#define DRAMSIZE (MEMORYSIZE * 0x100000)
9
10#define DRAMORIG 0x30000000
11#define IRAMORIG 0x40000000
12#define IRAMSIZE 4K
13#define FLASHORIG 0x0000000
14#define FLASHSIZE 1M
15
16SECTIONS
17{
18 . = DRAMORIG + 0x1000000;
19
20 .text : {
21 *(.init.text)
22 *(.text*)
23 }
24
25 .data : {
26 *(.icode)
27 *(.irodata)
28 *(.idata)
29 *(.data*)
30 . = ALIGN(0x4);
31 _dataend = . ;
32 }
33
34 .stack :
35 {
36 *(.stack)
37 _stackbegin = .;
38 stackbegin = .;
39 . += 0x2000;
40 _stackend = .;
41 stackend = .;
42 }
43 .bss : {
44 _edata = .;
45 *(.bss*);
46 *(.ibss);
47 *(COMMON)
48 _end = .;
49 }
50}
diff --git a/firmware/target/arm/sandisk/boot.lds b/firmware/target/arm/sandisk/boot.lds
new file mode 100644
index 0000000000..a087a7250d
--- /dev/null
+++ b/firmware/target/arm/sandisk/boot.lds
@@ -0,0 +1,56 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-littlearm)
5OUTPUT_ARCH(arm)
6INPUT(target/arm/crt0-pp-bl.o)
7
8#define DRAMSIZE (MEMORYSIZE * 0x100000)
9
10#define DRAMORIG 0x10000000
11#ifndef IRAMORIG
12#define IRAMORIG 0x40000000
13#endif
14#define IRAMSIZE 0x20000
15#define FLASHORIG 0x001f0000
16#define FLASHSIZE 2M
17
18
19SECTIONS
20{
21 . = IRAMORIG;
22
23 .text : {
24 *(.init.text)
25 *(.text*)
26 }
27
28 .data : {
29 *(.icode)
30 *(.irodata)
31 *(.idata)
32 *(.data*)
33 _dataend = . ;
34 }
35
36 .stack :
37 {
38 *(.stack)
39 _stackbegin = .;
40 stackbegin = .;
41 . += 0x2000;
42 _stackend = .;
43 stackend = .;
44 }
45
46 /* The bss section is too large for IRAM - we just move it 16MB into the
47 DRAM */
48
49 . = (DRAMORIG+16*1024*1024);
50 .bss : {
51 _edata = .;
52 *(.bss*);
53 *(.ibss);
54 _end = .;
55 }
56}
diff --git a/firmware/target/arm/tcc77x/boot.lds b/firmware/target/arm/tcc77x/boot.lds
new file mode 100644
index 0000000000..aa4b05c5ae
--- /dev/null
+++ b/firmware/target/arm/tcc77x/boot.lds
@@ -0,0 +1,62 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-littlearm)
5OUTPUT_ARCH(arm)
6INPUT(target/arm/tcc77x/crt0.o)
7
8#define DRAMSIZE (MEMORYSIZE * 0x100000)
9
10#define DRAMORIG 0x20000000
11#define IRAMORIG 0x00000000
12#define IRAMSIZE 64K
13#define FLASHORIG 0x0000000
14#define FLASHSIZE 1M
15
16MEMORY
17{
18#ifdef TCCBOOT
19 DRAM : ORIGIN = DRAMORIG + DRAMSIZE - 0x100000, LENGTH = 0x100000
20#else
21 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
22#endif
23 IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
24}
25
26SECTIONS
27{
28 .text : {
29 *(.init.text)
30 *(.text)
31 *(.text*)
32 *(.glue_7)
33 *(.glue_7t)
34 } > DRAM
35
36 .data : {
37 *(.icode)
38 *(.irodata)
39 *(.idata)
40 *(.data*)
41 *(.rodata.*)
42 . = ALIGN(0x4);
43 _dataend = . ;
44 } > DRAM
45
46 .stack :
47 {
48 *(.stack)
49 _stackbegin = .;
50 stackbegin = .;
51 . += 0x2000;
52 _stackend = .;
53 stackend = .;
54 } > DRAM
55 .bss : {
56 _edata = .;
57 *(.bss*);
58 *(.ibss);
59 *(COMMON)
60 _end = .;
61 } > DRAM
62}
diff --git a/firmware/target/arm/tcc780x/boot.lds b/firmware/target/arm/tcc780x/boot.lds
new file mode 100644
index 0000000000..657f31901a
--- /dev/null
+++ b/firmware/target/arm/tcc780x/boot.lds
@@ -0,0 +1,62 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-littlearm)
5OUTPUT_ARCH(arm)
6INPUT(target/arm/tcc780x/crt0.o)
7
8#define DRAMSIZE (MEMORYSIZE * 0x100000)
9
10#define DRAMORIG 0x20000000
11#define IRAMORIG 0x00000000
12#define IRAMSIZE 4K
13#define FLASHORIG 0x0000000
14#define FLASHSIZE 1M
15
16MEMORY
17{
18#ifdef TCCBOOT
19 DRAM : ORIGIN = DRAMORIG + DRAMSIZE - 0x100000, LENGTH = 0x100000
20#else
21 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
22#endif
23 IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
24}
25
26SECTIONS
27{
28 .text : {
29 *(.init.text)
30 *(.text)
31 *(.text*)
32 *(.glue_7)
33 *(.glue_7t)
34 } > DRAM
35
36 .data : {
37 *(.icode)
38 *(.irodata)
39 *(.idata)
40 *(.data*)
41 *(.rodata.*)
42 . = ALIGN(0x4);
43 _dataend = . ;
44 } > DRAM
45
46 .stack :
47 {
48 *(.stack)
49 _stackbegin = .;
50 stackbegin = .;
51 . += 0x2000;
52 _stackend = .;
53 stackend = .;
54 } > DRAM
55 .bss : {
56 _edata = .;
57 *(.bss*);
58 *(.ibss);
59 *(COMMON)
60 _end = .;
61 } > DRAM
62}
diff --git a/firmware/target/arm/tms320dm320/boot.lds b/firmware/target/arm/tms320dm320/boot.lds
new file mode 100644
index 0000000000..8fb40ae135
--- /dev/null
+++ b/firmware/target/arm/tms320dm320/boot.lds
@@ -0,0 +1,87 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-littlearm)
5OUTPUT_ARCH(arm)
6INPUT(target/arm/tms320dm320/crt0.o)
7
8#define DRAMSIZE (MEMORYSIZE * 0x100000)
9
10#define DRAMORIG 0x00900000
11#define IRAMORIG 0x00000000
12#define IRAMSIZE 16K
13#define FLASHORIG 0x00100000
14#define FLASHSIZE 8M
15
16MEMORY
17{
18 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
19 IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
20 FLASH : ORIGIN = FLASHORIG, LENGTH = FLASHSIZE
21}
22
23SECTIONS
24{
25 . = DRAMORIG + 0x1000000;
26
27 .text : {
28 loadaddress = .;
29 _loadaddress = .;
30 *(.init.text)
31 *(.text*)
32 *(.glue_7)
33 *(.glue_7t)
34 . = ALIGN(0x4);
35 } > DRAM
36
37 .rodata :
38 {
39 *(.rodata) /* problems without this, dunno why */
40 *(.rodata*)
41 *(.rodata.str1.1)
42 *(.rodata.str1.4)
43 . = ALIGN(0x4);
44
45 /* Pseudo-allocate the copies of the data sections */
46 _datacopy = .;
47 } > DRAM
48
49 .data : {
50 *(.icode)
51 *(.irodata)
52 *(.idata)
53 *(.data*)
54 . = ALIGN(0x4);
55 _dataend = . ;
56 } > DRAM
57
58 .stack :
59 {
60 *(.stack)
61 _stackbegin = .;
62 stackbegin = .;
63 . += 0x2000;
64 _stackend = .;
65 stackend = .;
66 } > DRAM
67
68 .bss :
69 {
70 _edata = .;
71 *(.bss*);
72 *(.ibss);
73 *(COMMON)
74 _end = .;
75 } > DRAM
76
77 .vectors IRAMORIG :
78 {
79 _vectorsstart = .;
80 KEEP(*(.resetvectors));
81 *(.resetvectors);
82 KEEP(*(.vectors));
83 *(.vectors);
84 _vectorsend = .;
85 } AT > DRAM
86 _vectorscopy = LOADADDR(.vectors);
87}
diff --git a/firmware/target/coldfire/iaudio/boot.lds b/firmware/target/coldfire/iaudio/boot.lds
new file mode 100644
index 0000000000..17b1457747
--- /dev/null
+++ b/firmware/target/coldfire/iaudio/boot.lds
@@ -0,0 +1,90 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-m68k)
5INPUT(target/coldfire/crt0.o)
6
7#define DRAMSIZE (MEMORYSIZE * 0x100000)
8
9#if defined(IAUDIO_X5) || defined(IAUDIO_M5)
10#define DRAMORIG 0x31000000
11#define IRAMORIG 0x10000000
12#define IRAMSIZE 0x20000
13#define FLASHORIG 0x00010000
14#define FLASHSIZE 4M
15#elif defined(IAUDIO_M3)
16#define DRAMORIG 0x31000000
17#define IRAMORIG 0x10000000
18#define IRAMSIZE 0x18000
19#define FLASHORIG 0x00010000
20#define FLASHSIZE 4M
21#endif
22
23MEMORY
24{
25 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
26 IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
27 FLASH : ORIGIN = FLASHORIG, LENGTH = FLASHSIZE
28}
29
30SECTIONS
31{
32 .vectors :
33 {
34 *(.init.text)
35 _datacopy = .;
36 } > FLASH
37
38 .data : AT ( _datacopy )
39 {
40 _datastart = .;
41 KEEP(*(.resetvectors));
42 *(.resetvectors);
43 KEEP(*(.vectors));
44 *(.vectors);
45 . = ALIGN(0x200);
46 *(.icode)
47 *(.irodata)
48 *(.idata)
49 *(.data*)
50 . = ALIGN(0x4);
51 _dataend = .;
52 . = ALIGN(0x10); /* Maintain proper alignment for .text section */
53 } > IRAM
54
55 /* TRICK ALERT! Newer versions of the linker don't allow output sections
56 to overlap even if one of them is empty, so advance the location pointer
57 "by hand" */
58 .text LOADADDR(.data) + SIZEOF(.data) :
59 {
60 *(.init.text)
61 *(.text*)
62 . = ALIGN(0x4);
63 } > FLASH
64
65 .rodata :
66 {
67 *(.rodata*)
68 . = ALIGN(0x4);
69 _iramcopy = .;
70 } > FLASH
71
72 .stack :
73 {
74 *(.stack)
75 _stackbegin = .;
76 stackbegin = .;
77 . += 0x2000;
78 _stackend = .;
79 stackend = .;
80 } > IRAM
81
82 .bss DRAMORIG+0x800000:
83 {
84 _edata = .;
85 *(.ibss)
86 *(.bss*)
87 *(COMMON)
88 _end = .;
89 } > DRAM
90}
diff --git a/firmware/target/coldfire/iriver/boot.lds b/firmware/target/coldfire/iriver/boot.lds
new file mode 100644
index 0000000000..4e2619f764
--- /dev/null
+++ b/firmware/target/coldfire/iriver/boot.lds
@@ -0,0 +1,89 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-m68k)
5INPUT(target/coldfire/crt0.o)
6
7#define DRAMSIZE (MEMORYSIZE * 0x100000)
8
9#ifdef IRIVER_H100_SERIES
10#define DRAMORIG 0x31000000
11#define IRAMORIG 0x10000000
12#define IRAMSIZE 0x18000
13#define FLASHORIG 0x001f0000
14#define FLASHSIZE 2M
15#elif defined(IRIVER_H300_SERIES)
16#define DRAMORIG 0x31000000
17#define IRAMORIG 0x10000000
18#define IRAMSIZE 0x18000
19#define FLASHORIG 0x003f0000
20#define FLASHSIZE 4M
21#endif
22
23MEMORY
24{
25 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
26 IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
27 FLASH : ORIGIN = FLASHORIG, LENGTH = FLASHSIZE
28}
29
30SECTIONS
31{
32 .vectors :
33 {
34 _datacopy = .;
35 } > FLASH
36
37 .data : AT ( _datacopy )
38 {
39 _datastart = .;
40 KEEP(*(.resetvectors));
41 *(.resetvectors);
42 KEEP(*(.vectors));
43 *(.vectors);
44 . = ALIGN(0x200);
45 *(.icode)
46 *(.irodata)
47 *(.idata)
48 *(.data*)
49 . = ALIGN(0x4);
50 _dataend = .;
51 . = ALIGN(0x10); /* Maintain proper alignment for .text section */
52 } > IRAM
53
54 /* TRICK ALERT! Newer versions of the linker don't allow output sections
55 to overlap even if one of them is empty, so advance the location pointer
56 "by hand" */
57 .text LOADADDR(.data) + SIZEOF(.data) :
58 {
59 *(.init.text)
60 *(.text*)
61 . = ALIGN(0x4);
62 } > FLASH
63
64 .rodata :
65 {
66 *(.rodata*)
67 . = ALIGN(0x4);
68 _iramcopy = .;
69 } > FLASH
70
71 .stack :
72 {
73 *(.stack)
74 _stackbegin = .;
75 stackbegin = .;
76 . += 0x2000;
77 _stackend = .;
78 stackend = .;
79 } > IRAM
80
81 .bss DRAMORIG+0x800000:
82 {
83 _edata = .;
84 *(.ibss)
85 *(.bss*)
86 *(COMMON)
87 _end = .;
88 } > DRAM
89}
diff --git a/firmware/target/sh/archos/boot.lds b/firmware/target/sh/archos/boot.lds
new file mode 100644
index 0000000000..8002f6e87f
--- /dev/null
+++ b/firmware/target/sh/archos/boot.lds
@@ -0,0 +1,81 @@
1#include "config.h"
2
3ENTRY(start)
4OUTPUT_FORMAT(elf32-sh)
5INPUT(target/sh/crt0.o)
6
7#define DRAMSIZE (MEMORYSIZE * 0x100000)
8
9#define DRAMORIG 0x09000000
10#define IRAMORIG 0x0f000000
11#define IRAMSIZE 0x1000
12#define FLASHORIG 0x02000000 + ROM_START
13#define FLASHSIZE 256K - ROM_START
14
15MEMORY
16{
17 DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
18 IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
19 FLASH : ORIGIN = FLASHORIG, LENGTH = FLASHSIZE
20}
21
22SECTIONS
23{
24 .vectors :
25 {
26 _datacopy = .;
27 } > FLASH
28
29 .data : AT ( _datacopy )
30 {
31 _datastart = .;
32 KEEP(*(.resetvectors));
33 *(.resetvectors);
34 KEEP(*(.vectors));
35 *(.vectors);
36 . = ALIGN(0x200);
37 *(.icode)
38 *(.irodata)
39 *(.idata)
40 *(.data*)
41 . = ALIGN(0x4);
42 _dataend = .;
43 . = ALIGN(0x10); /* Maintain proper alignment for .text section */
44 } > IRAM
45
46 /* TRICK ALERT! Newer versions of the linker don't allow output sections
47 to overlap even if one of them is empty, so advance the location pointer
48 "by hand" */
49 .text LOADADDR(.data) + SIZEOF(.data) :
50 {
51 *(.init.text)
52 *(.text*)
53 . = ALIGN(0x4);
54 } > FLASH
55
56 .rodata :
57 {
58 *(.rodata*)
59 . = ALIGN(0x4);
60 _iramcopy = .;
61 } > FLASH
62
63 .stack :
64 {
65 *(.stack)
66 _stackbegin = .;
67 stackbegin = .;
68 . += 0x2000;
69 _stackend = .;
70 stackend = .;
71 } > IRAM
72
73 .bss :
74 {
75 _edata = .;
76 *(.ibss)
77 *(.bss*)
78 *(COMMON)
79 _end = .;
80 } > IRAM
81}