firmware: Increased data size for for ram linker scripts.
[osmocom-bb.git] / src / target / firmware / board / compal / highram.lds
blob498a2fa17c38b65d00a5d9a6766290948a918eeb
1 /*
2  * Linker script for running from upper internal RAM on the TI Calypso
3  *
4  * This script creates a binary that can be loaded into high ram on
5  * all Calypso devices. It can be jumped into directly at the load
6  * address.
7  *
8  * This is used for debugging the loader and for general hacking purposes.
9  *
10  */
11 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
12 OUTPUT_ARCH(arm)
13 ENTRY(_start)
14 MEMORY
16     /* lowram: could be anything, we place exception vectors here */
17         XRAM (rw) : ORIGIN = 0x00800000, LENGTH = 0x00020000
18     /* highram binary: our text, initialized data */
19     LRAM (rw) : ORIGIN = 0x00820000, LENGTH = 0x00014000
20     /* highram binary: our unitialized data, stacks, heap */
21     IRAM (rw) : ORIGIN = 0x00834000, LENGTH = 0x0000c000
23 SECTIONS
25     . = 0x820000;
27     /* initialization code */
28     .text.start : {
29         PROVIDE(_start = .);
30         KEEP(*(.text.start))
31         *(.text.start)
32     } > LRAM
34     /* exception vectors linked for 0x80001c to 0x800034 */
35     .text.exceptions 0x80001c : AT (LOADADDR(.text.start) + SIZEOF(.text.start)) {
36         KEEP(*(.text.exceptions))
37         * (.text.exceptions)
38         . = ALIGN(4);
39     } > XRAM
40     PROVIDE(_exceptions = LOADADDR(.text.exceptions));
42     /* code */
43     . = ALIGN(4);
44     .text (LOADADDR(.text.exceptions) + SIZEOF(.text.exceptions)) :
45           AT (LOADADDR(.text.exceptions) + SIZEOF(.text.exceptions)) {
46         /* regular code */
47         *(.text*)
48         /* always-in-ram code */
49         *(.ramtext*)
50         /* gcc voodoo */
51         *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
52         . = ALIGN(4);
53     } > LRAM
54     PROVIDE(_text_start = LOADADDR(.text));
55     PROVIDE(_text_end = LOADADDR(.text) + SIZEOF(.text));
57     /* constructor pointers */
58     .ctors : {
59         /* ctor count */
60         LONG(SIZEOF(.ctors) / 4 - 2)
61         /* ctor pointers */
62         KEEP(*(SORT(.ctors)))
63         /* end of list */
64         LONG(0)
65     } > LRAM
66     PROVIDE(_ctor_start = LOADADDR(.ctors));
67     PROVIDE(_ctor_end = LOADADDR(.ctors) + SIZEOF(.ctors));
69     /* destructor pointers */
70     .dtors : {
71         /* dtor count */
72         LONG(SIZEOF(.dtors) / 4 - 2)
73         /* dtor pointers */
74         KEEP(*(SORT(.dtors)))
75         /* end of list */
76         LONG(0)
77     } > LRAM
78     PROVIDE(_dtor_start = LOADADDR(.dtors));
79     PROVIDE(_dtor_end = LOADADDR(.dtors) + SIZEOF(.dtors));
81     /* read-only data */
82     . = ALIGN(4);
83     .rodata : {
84         *(.rodata*)
85     } > LRAM
86     PROVIDE(_rodata_start = LOADADDR(.rodata));
87     PROVIDE(_rodata_end = LOADADDR(.rodata) + SIZEOF(.rodata));
89     /* initialized data */
90     . = ALIGN(4);
91     .data : {
92         *(.data)
93     } > LRAM
94     PROVIDE(_data_start = LOADADDR(.data));
95     PROVIDE(_data_end = LOADADDR(.data) + SIZEOF(.data));
97     /* pic offset tables */
98     . = ALIGN(4);
99     .got : {
100         *(.got)
101         *(.got.plt) *(.igot.plt) *(.got) *(.igot)
102     } > LRAM
103     PROVIDE(_got_start = LOADADDR(.got));
104     PROVIDE(_got_end = LOADADDR(.got) + SIZEOF(.got));
106     /* uninitialized data */
107     .bss (NOLOAD) : {
108         . = ALIGN(4);
109         __bss_start = .;
110         *(.bss)
111     } > IRAM
112     . = ALIGN(4);
113     __bss_end = .;
114     PROVIDE(_bss_start = __bss_start);
115     PROVIDE(_bss_end = __bss_end);
117     /* end of image */
118     . = ALIGN(4);
119     _end = .;
120     PROVIDE(end = .);