2 * Linker script for running from upper internal RAM on the TI Calypso
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
8 * This is used for debugging the loader and for general hacking purposes.
11 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
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
27 /* initialization code */
34 /* exception vectors linked for 0x80001c to 0x800034 */
35 .text.exceptions 0x80001c : AT (LOADADDR(.text.start) + SIZEOF(.text.start)) {
36 KEEP(*(.text.exceptions))
40 PROVIDE(_exceptions = LOADADDR(.text.exceptions));
44 .text (LOADADDR(.text.exceptions) + SIZEOF(.text.exceptions)) :
45 AT (LOADADDR(.text.exceptions) + SIZEOF(.text.exceptions)) {
48 /* always-in-ram code */
51 *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
54 PROVIDE(_text_start = LOADADDR(.text));
55 PROVIDE(_text_end = LOADADDR(.text) + SIZEOF(.text));
57 /* constructor pointers */
60 LONG(SIZEOF(.ctors) / 4 - 2)
66 PROVIDE(_ctor_start = LOADADDR(.ctors));
67 PROVIDE(_ctor_end = LOADADDR(.ctors) + SIZEOF(.ctors));
69 /* destructor pointers */
72 LONG(SIZEOF(.dtors) / 4 - 2)
78 PROVIDE(_dtor_start = LOADADDR(.dtors));
79 PROVIDE(_dtor_end = LOADADDR(.dtors) + SIZEOF(.dtors));
86 PROVIDE(_rodata_start = LOADADDR(.rodata));
87 PROVIDE(_rodata_end = LOADADDR(.rodata) + SIZEOF(.rodata));
89 /* initialized data */
94 PROVIDE(_data_start = LOADADDR(.data));
95 PROVIDE(_data_end = LOADADDR(.data) + SIZEOF(.data));
97 /* pic offset tables */
101 *(.got.plt) *(.igot.plt) *(.got) *(.igot)
103 PROVIDE(_got_start = LOADADDR(.got));
104 PROVIDE(_got_end = LOADADDR(.got) + SIZEOF(.got));
106 /* uninitialized data */
114 PROVIDE(_bss_start = __bss_start);
115 PROVIDE(_bss_end = __bss_end);