Commit | Line | Data |
---|---|---|
82704155 | 1 | # Copyright (C) 2014-2019 Free Software Foundation, Inc. |
6c19b93b | 2 | # |
985743c7 NC |
3 | # Copying and distribution of this file, with or without modification, |
4 | # are permitted in any medium without royalty provided the copyright | |
5 | # notice and this notice are preserved. | |
6 | ||
2bf2bf23 AM |
7 | # Using an empty script for ld -r is better than mashing together |
8 | # sections. This hack likely leaves ld -Ur broken. | |
9 | test -n "${RELOCATING}" || exit 0 | |
cf88bb9f | 10 | cat << EOF |
82704155 | 11 | /* Copyright (C) 2014-2019 Free Software Foundation, Inc. |
985743c7 NC |
12 | |
13 | Copying and distribution of this script, with or without modification, | |
14 | are permitted in any medium without royalty provided the copyright | |
15 | notice and this notice are preserved. */ | |
16 | ||
cf88bb9f NC |
17 | OUTPUT_FORMAT("elf32-ip2k", "elf32-ip2k", "elf32-ip2k") |
18 | OUTPUT_ARCH(ip2k) | |
b34c1498 | 19 | ${RELOCATING+ENTRY(_start)} |
cf88bb9f NC |
20 | SEARCH_DIR(.); |
21 | ||
22 | /* IP2022 default linker script. */ | |
23 | ||
24 | MEMORY | |
25 | { | |
26 | D_GPR : org = 0x01000080, len = 128 | |
6c19b93b AM |
27 | D_RAM : org = 0x01000100, len = 4K - 256 |
28 | P_RAM : org = 0x02000000, len = 16K | |
29 | P_ROM : org = 0x02010000, len = 64K - 32 | |
30 | P_RESET : org = 0x0201FFE0, len = 32 | |
31 | P_CONFIG : org = 0x02020000, len = 128 | |
cf88bb9f NC |
32 | } |
33 | ||
34 | SECTIONS | |
35 | { | |
36 | /* Allocated memory end markers | |
b81c93c8 | 37 | (initialized to start of appropriate memory address). */ |
cf88bb9f NC |
38 | __data_end = 0x01000100; |
39 | __pram_end = 0x02000000; | |
40 | __flash_end = 0x02010000; | |
41 | ||
42 | /* Global general purpose registers in direct addressing range. */ | |
43 | .gpr 0x01000080 : | |
44 | { | |
45 | *(.gpr) | |
46 | } >D_GPR | |
47 | ||
48 | /* Pre-allocated, pre-initialized data memory. */ | |
49 | __data_run_begin = __data_end; | |
50 | __data_load_begin = (__flash_end + 1) & 0xFFFFFFFE; | |
51 | .data __data_run_begin : AT (__data_load_begin) | |
52 | { | |
53 | * (.data); | |
54 | * (.rodata) | |
55 | } >D_RAM | |
56 | __data_run_end = __data_run_begin + SIZEOF(.data); | |
57 | __data_load_end = __data_load_begin + SIZEOF(.data); | |
58 | __data_end = __data_run_end; | |
59 | __flash_end = __data_load_end; | |
60 | ||
61 | /* Pre-allocated, uninitialized data memory. */ | |
62 | __bss_begin = __data_end; | |
63 | .bss __bss_begin : | |
64 | { | |
65 | * (.bss) | |
66 | } >D_RAM | |
67 | __bss_end = __bss_begin + SIZEOF(.bss); | |
68 | __data_end = __bss_end; | |
69 | ||
70 | /* Pre-allocated PRAM data memory. */ | |
71 | __pram_data_begin = (__pram_end + 1) & 0xFFFFFFFE; | |
72 | .pram_data __pram_data_begin : | |
73 | { | |
74 | * (.pram_data) | |
75 | } >P_RAM | |
76 | __pram_data_end = __pram_data_begin + SIZEOF(.pram_data); | |
77 | __pram_end = __pram_data_end; | |
78 | ||
79 | /* PRAM code. */ | |
80 | __pram_run_begin = (__pram_end + 1) & 0xFFFFFFFE; | |
81 | __pram_load_begin = (__flash_end + 1) & 0xFFFFFFFE; | |
82 | .pram __pram_run_begin : AT (__pram_load_begin) | |
83 | { | |
84 | * (.pram) | |
85 | } >P_RAM | |
86 | __pram_run_end = __pram_run_begin + SIZEOF(.pram); | |
87 | __pram_load_end = __pram_load_begin + SIZEOF(.pram); | |
88 | ||
89 | __pram_load_shift = ((__pram_run_begin - __pram_load_begin) & 0x1FFFF) | 0x02000000; | |
90 | __pram_end = __pram_run_end; | |
91 | __flash_end = __pram_load_end; | |
92 | ||
93 | /* PRAM overlay code. */ | |
94 | __pram_overlay_run_start = (__pram_end + 1) & 0xFFFFFFFE; | |
6c19b93b | 95 | __pram_overlay_load_start = (__flash_end + 1) & 0xFFFFFFFE; |
cf88bb9f NC |
96 | OVERLAY __pram_overlay_run_start : AT (__pram_overlay_load_start) |
97 | { | |
98 | .pram1 { */overlay1/* (.pram); * (.pram1) } | |
99 | .pram2 { */overlay2/* (.pram); * (.pram2) } | |
100 | } >P_RAM | |
101 | __pram_overlay_run_end = .; | |
102 | __pram_overlay_load_end = __pram_overlay_load_start + SIZEOF(.pram1) + SIZEOF(.pram2); | |
103 | __pram_end = __pram_overlay_run_end; | |
104 | __flash_end = __pram_overlay_load_end; | |
105 | ||
106 | /* Flash code. */ | |
107 | __text_begin = (__flash_end + 1) & 0xFFFFFFFE; | |
108 | .text __text_begin : | |
109 | { | |
110 | * (.text); | |
111 | * (.text.libgcc) | |
112 | } >P_ROM = 0xffff | |
113 | __text_end = __text_begin + SIZEOF(.text); | |
114 | __flash_end = __text_end; | |
115 | ||
116 | /* Strings. */ | |
117 | __strings_begin = (__flash_end + 1) & 0xFFFFFFFE; | |
118 | .strings __strings_begin : | |
119 | { | |
120 | * (strings); | |
121 | * (.progmem.data) | |
122 | } >P_ROM = 0xffff | |
123 | __strings_end = __strings_begin + SIZEOF (.strings); | |
124 | __flash_end = __strings_end; | |
125 | ||
126 | .ctors : { * (.ctors) } > P_ROM | |
127 | .dtors : { * (.dtors) } > P_ROM | |
128 | ||
129 | /* Reset code. */ | |
130 | .reset : { * (.reset) } >P_RESET = 0xffff | |
131 | ||
132 | /* Configuration block. */ | |
133 | .config : { * (.config) } >P_CONFIG = 0xffff | |
134 | ||
135 | /* Stack. */ | |
136 | PROVIDE (__stack = 0x01000FFF); | |
137 | ||
138 | /* Stabs debugging sections. */ | |
139 | .stab 0 : { *(.stab) } | |
140 | .stabstr 0 : { *(.stabstr) } | |
141 | .stab.excl 0 : { *(.stab.excl) } | |
142 | .stab.exclstr 0 : { *(.stab.exclstr) } | |
143 | .stab.index 0 : { *(.stab.index) } | |
144 | .stab.indexstr 0 : { *(.stab.indexstr) } | |
145 | .comment 0 : { *(.comment) } | |
146 | ||
ceb0a680 NC |
147 | EOF |
148 | ||
d061dfac | 149 | . $srcdir/scripttempl/DWARF.sc |
ceb0a680 NC |
150 | |
151 | cat <<EOF | |
cf88bb9f NC |
152 | } |
153 | EOF |