summaryrefslogtreecommitdiffstats
path: root/src/target/firmware/board/common/compal_ramload.lds
blob: ae791c5d59d7f512287caa5f19be55bd824917d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY
{
	/* area that can be initialized by the loader (plus some reserved stuff) */
	LRAM (rw) : ORIGIN = 0x00800000, LENGTH = 0x00010000
	/* remainder of internal ram, can be used for bss and the like */
	IRAM (rw) : ORIGIN = 0x00810000, LENGTH = 0x00030000
	/* external ram on a C123 */
	ERAM (rw) : ORIGIN = 0x01000000, LENGTH = 0x00040000
}
SECTIONS
{
	. = 0x800000;

	/* reserved (what is in here?) */
	.compal.reserved1 (NOLOAD) : { . = 0x100; } > LRAM

	/* XXX: leftovers from exception vector trickery development? */
	/* .compal.reserved1 (NOLOAD) : { . = 0x1C; } > LRAM */
	/* .compal.reserved2 (NOLOAD) : { . = 0xC8; } > LRAM */

	/* image signature (prepended by compal_dnload according to phone type) */
	.compal.header (NOLOAD) : { . = 4; } > LRAM

	/* code */
	. = ALIGN(4);
	.text_start : {
		/* initialization code */
		PROVIDE(_start = .);
		KEEP(*(.init))
		*(.text._start)
		_exceptions = .;
	} > LRAM

	/* exception vectors from 0x80001c to 0x800034 */
	.text.exceptions 0x80001c: AT (LOADADDR(.text_start) + SIZEOF(.text_start)) {
		KEEP(*(.text.exceptions))
		* (.text.exceptions)
		. = ALIGN(4);
	} > LRAM

	/* code */
	. = ALIGN(4);
	.text (LOADADDR(.text.exceptions) + SIZEOF(.text.exceptions)) :
	      AT (LOADADDR(.text.exceptions) + SIZEOF(.text.exceptions)) {
		/* regular code */
		*(.text*)
	} > LRAM

	/* read-only data */
	. = ALIGN(4);
	.rodata : {
		*(.rodata) 
	} > LRAM

	/* initialized data */
	. = ALIGN(4);
		.data : {
		*(.data)
	} > LRAM

	/* pic offset tables */
	. = ALIGN(4);
	.got : {
		*(.got) 
	} > LRAM

	/* uninitialized data */
	.bss (NOLOAD) : {
		. = ALIGN(4);
		__bss_start = .;
		*(.bss) 
	} > IRAM
	. = ALIGN(4);
	__bss_end = .;

	/* end of image */
	. = ALIGN(4);
	_end = .;
	PROVIDE(end = .);
}