Add all phase bits to a control register for atomic phase changes.
[SCSI2SD-V6.git] / software / SCSI2SD / SCSI2SD.cydsn / Generated_Source / PSoC5 / cm3gcc.ld
1 /* Linker script for ARM M-profile Simulator\r
2  *\r
3  * Version: Sourcery G++ Lite 2010q1-188\r
4  * Support: https://support.codesourcery.com/GNUToolchain/\r
5  *\r
6  * Copyright (c) 2007, 2008, 2009, 2010 CodeSourcery, Inc.\r
7  *\r
8  * The authors hereby grant permission to use, copy, modify, distribute,\r
9  * and license this software and its documentation for any purpose, provided\r
10  * that existing copyright notices are retained in all copies and that this\r
11  * notice is included verbatim in any distributions.  No written agreement,\r
12  * license, or royalty fee is required for any of the authorized uses.\r
13  * Modifications to this software may be copyrighted by their authors\r
14  * and need not follow the licensing terms described here, provided that\r
15  * the new terms are clearly indicated on the first page of each file where\r
16  * they apply.\r
17  */\r
18 OUTPUT_FORMAT ("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")\r
19 ENTRY(__cy_reset)\r
20 SEARCH_DIR(.)\r
21 GROUP(-lgcc -lc -lnosys)\r
22 \r
23 \r
24 MEMORY\r
25 {\r
26   rom (rx) : ORIGIN = 0x0, LENGTH = 131072\r
27   ram (rwx) : ORIGIN = 0x20000000 - (32768 / 2), LENGTH = 32768\r
28 }\r
29 \r
30 \r
31 CY_APPL_ORIGIN      = 0; \r
32 CY_FLASH_ROW_SIZE   = 256;\r
33 CY_ECC_ROW_SIZE     = 32;\r
34 CY_EE_IN_BTLDR      = 0x00;\r
35 CY_APPL_LOADABLE    = 1;\r
36 CY_EE_SIZE          = 2048;\r
37 CY_APPL_NUM         = 1;\r
38 CY_APPL_MAX         = 1;\r
39 CY_METADATA_SIZE    = 64;\r
40 \r
41 \r
42 /* These force the linker to search for particular symbols from\r
43  * the start of the link process and thus ensure the user's\r
44  * overrides are picked up\r
45  */\r
46 EXTERN(Reset)\r
47 \r
48 /* Bring in the interrupt routines & vector */\r
49 EXTERN(main)\r
50 \r
51 /* Bring in the meta data */\r
52 EXTERN(cy_meta_loader cy_bootloader cy_meta_loadable cy_meta_bootloader)\r
53 EXTERN(cy_meta_custnvl cy_meta_wolatch cy_meta_flashprotect cy_metadata)\r
54 \r
55 /* Provide fall-back values */\r
56 PROVIDE(__cy_heap_start = _end);\r
57 PROVIDE(__cy_region_num = (__cy_regions_end - __cy_regions) / 16);\r
58 PROVIDE(__cy_stack = ORIGIN(ram) + LENGTH(ram));\r
59 PROVIDE(__cy_heap_end = __cy_stack - 0x2000);\r
60 \r
61 \r
62 SECTIONS\r
63 {\r
64   /* The bootloader location */\r
65   .cybootloader 0x0 : { KEEP(*(.cybootloader)) } >rom\r
66 \r
67   /* Calculate where the loadables should start */\r
68   appl1_start   = CY_APPL_ORIGIN ? CY_APPL_ORIGIN : ALIGN(CY_FLASH_ROW_SIZE);\r
69   appl2_start   = appl1_start + ALIGN((LENGTH(rom) - appl1_start - 2 * CY_FLASH_ROW_SIZE) / 2, CY_FLASH_ROW_SIZE);\r
70   appl_start    = (CY_APPL_NUM == 1) ? appl1_start : appl2_start;\r
71   ecc_offset    = (appl_start / CY_FLASH_ROW_SIZE) * CY_ECC_ROW_SIZE;\r
72   ee_offset     = (CY_APPL_LOADABLE && !CY_EE_IN_BTLDR) ? ((CY_EE_SIZE / CY_APPL_MAX) * (CY_APPL_NUM - 1)) : 0;\r
73   ee_size       = (CY_APPL_LOADABLE && !CY_EE_IN_BTLDR) ? (CY_EE_SIZE / CY_APPL_MAX) : CY_EE_SIZE;\r
74   PROVIDE(CY_ECC_OFFSET = ecc_offset);\r
75   \r
76   .text appl_start :\r
77   {\r
78     CREATE_OBJECT_SYMBOLS\r
79     PROVIDE(__cy_interrupt_vector = RomVectors);\r
80 \r
81     *(.romvectors)\r
82 \r
83     /* Make sure we pulled in an interrupt vector.  */\r
84     ASSERT (. != __cy_interrupt_vector, "No interrupt vector");\r
85 \r
86     ASSERT (CY_APPL_ORIGIN ? (SIZEOF(.cybootloader) <= CY_APPL_ORIGIN) : 1, "Wrong image location");\r
87 \r
88     PROVIDE(__cy_reset = Reset);\r
89     *(.text.Reset)\r
90     /* Make sure we pulled in some reset code.  */\r
91     ASSERT (. != __cy_reset, "No reset code");\r
92 \r
93         /* Place the DMA initialization before text to ensure it gets placed in first 64K of flash */\r
94     *(.dma_init)\r
95     ASSERT(appl_start + . <= 0x10000 || !0, "DMA Init must be within the first 64k of flash");\r
96                 \r
97     *(.text .text.* .gnu.linkonce.t.*)\r
98     *(.plt)\r
99     *(.gnu.warning)\r
100     *(.glue_7t) *(.glue_7) *(.vfp11_veneer)\r
101         \r
102     KEEP(*(.bootloader)) /* necessary for bootloader's, but doesn't impact non-bootloaders */\r
103 \r
104     *(.ARM.extab* .gnu.linkonce.armextab.*)\r
105     *(.gcc_except_table)\r
106   } >rom\r
107   .eh_frame_hdr : ALIGN (4)\r
108   {\r
109     KEEP (*(.eh_frame_hdr))\r
110   } >rom\r
111   .eh_frame : ALIGN (4)\r
112   {\r
113     KEEP (*(.eh_frame))\r
114   } >rom\r
115   /* .ARM.exidx is sorted, so has to go in its own output section.  */\r
116   PROVIDE_HIDDEN (__exidx_start = .);\r
117   .ARM.exidx :\r
118   {\r
119     *(.ARM.exidx* .gnu.linkonce.armexidx.*)\r
120   } >rom\r
121   __exidx_end = .;\r
122   .rodata : ALIGN (4)\r
123   {\r
124     *(.rodata .rodata.* .gnu.linkonce.r.*)\r
125 \r
126     . = ALIGN(4);\r
127     KEEP(*(.init))\r
128 \r
129     . = ALIGN(4);\r
130     __preinit_array_start = .;\r
131     KEEP (*(.preinit_array))\r
132     __preinit_array_end = .;\r
133 \r
134     . = ALIGN(4);\r
135     __init_array_start = .;\r
136     KEEP (*(SORT(.init_array.*)))\r
137     KEEP (*(.init_array))\r
138     __init_array_end = .;\r
139 \r
140     . = ALIGN(4);\r
141     KEEP(*(.fini))\r
142 \r
143     . = ALIGN(4);\r
144     __fini_array_start = .;\r
145     KEEP (*(.fini_array))\r
146     KEEP (*(SORT(.fini_array.*)))\r
147     __fini_array_end = .;\r
148 \r
149     . = ALIGN(0x4);\r
150     KEEP (*crtbegin.o(.ctors))\r
151     KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))\r
152     KEEP (*(SORT(.ctors.*)))\r
153     KEEP (*crtend.o(.ctors))\r
154 \r
155     . = ALIGN(0x4);\r
156     KEEP (*crtbegin.o(.dtors))\r
157     KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))\r
158     KEEP (*(SORT(.dtors.*)))\r
159     KEEP (*crtend.o(.dtors))\r
160 \r
161     . = ALIGN(4);\r
162     __cy_regions = .;\r
163     LONG (__cy_region_init_ram)\r
164     LONG (__cy_region_start_data)\r
165     LONG (__cy_region_init_size_ram)\r
166     LONG (__cy_region_zero_size_ram)\r
167     __cy_regions_end = .;\r
168 \r
169     . = ALIGN (8);\r
170     _etext = .;\r
171   } >rom\r
172 \r
173   .ramvectors (NOLOAD) : ALIGN(8)\r
174   {\r
175     __cy_region_start_ram = .;\r
176     KEEP(*(.ramvectors))\r
177   }\r
178 \r
179   .noinit (NOLOAD) : ALIGN(8)\r
180   {\r
181     KEEP(*(.noinit))\r
182   }\r
183 \r
184   .data : ALIGN(8)\r
185   {\r
186     __cy_region_start_data = .;\r
187 \r
188     KEEP(*(.jcr))\r
189     *(.got.plt) *(.got)\r
190     *(.shdata)\r
191     *(.data .data.* .gnu.linkonce.d.*)\r
192     . = ALIGN (8);\r
193     *(.ram)\r
194     _edata = .;\r
195   } >ram AT>rom\r
196   .bss : ALIGN(8)\r
197   {\r
198     PROVIDE(__bss_start__ = .);\r
199     *(.shbss)\r
200     *(.bss .bss.* .gnu.linkonce.b.*)\r
201     *(COMMON)\r
202     . = ALIGN (8);\r
203     *(.ram.b)\r
204     _end = .;\r
205     __end = .;\r
206   } >ram AT>rom\r
207   PROVIDE(end = .);\r
208   PROVIDE(__bss_end__ = .);\r
209   \r
210   __cy_region_init_ram = LOADADDR (.data);\r
211   __cy_region_init_size_ram = _edata - ADDR (.data);\r
212   __cy_region_zero_size_ram = _end - _edata;\r
213   \r
214   /* The .stack and .heap sections don't contain any symbols. \r
215    * They are only used for linker to calculate RAM utilization.\r
216    */\r
217   .heap (NOLOAD) :\r
218   {\r
219     . = _end;\r
220     . += 0x0256;\r
221     __cy_heap_limit = .;\r
222   } >ram\r
223 \r
224   .stack (__cy_stack - 0x2000) (NOLOAD) :\r
225   {\r
226     __cy_stack_limit = .;\r
227     . += 0x2000;\r
228   } >ram\r
229   \r
230   /* Check if data + heap + stack exceeds RAM limit */\r
231   ASSERT(__cy_stack_limit >= __cy_heap_limit, "region RAM overflowed with stack")\r
232 \r
233   .cyloadermeta ((appl_start == 0) ? (LENGTH(rom) - CY_METADATA_SIZE) : 0xF0000000) :\r
234   {\r
235     KEEP(*(.cyloadermeta))\r
236   } :NONE\r
237 \r
238   .cyloadablemeta (LENGTH(rom) - CY_FLASH_ROW_SIZE * (CY_APPL_NUM - 1) - CY_METADATA_SIZE) :\r
239   {\r
240     KEEP(*(.cyloadablemeta))\r
241   } >rom\r
242 \r
243   .cyconfigecc (0x80000000 + ecc_offset) : \r
244   {\r
245     KEEP(*(.cyconfigecc))\r
246   } :NONE \r
247 \r
248   .cycustnvl      0x90000000 : { KEEP(*(.cycustnvl)) } :NONE \r
249   .cywolatch      0x90100000 : { KEEP(*(.cywolatch)) } :NONE \r
250 \r
251   .cyeeprom (0x90200000 + ee_offset) : \r
252   {\r
253     KEEP(*(.cyeeprom))\r
254     ASSERT(. <= (0x90200000 + ee_offset + ee_size), ".cyeeprom data will not fit in EEPROM");\r
255   } :NONE \r
256 \r
257   .cyflashprotect 0x90400000 : { KEEP(*(.cyflashprotect)) } :NONE \r
258   .cymeta         0x90500000 : { KEEP(*(.cymeta)) } :NONE \r
259 \r
260   .stab 0 (NOLOAD) : { *(.stab) }\r
261   .stabstr 0 (NOLOAD) : { *(.stabstr) }\r
262   /* DWARF debug sections.\r
263    * Symbols in the DWARF debugging sections are relative to the beginning\r
264    * of the section so we begin them at 0.\r
265    */\r
266   /* DWARF 1 */\r
267   .debug          0 : { *(.debug) }\r
268   .line           0 : { *(.line) }\r
269   /* GNU DWARF 1 extensions */\r
270   .debug_srcinfo  0 : { *(.debug_srcinfo) }\r
271   .debug_sfnames  0 : { *(.debug_sfnames) }\r
272   /* DWARF 1.1 and DWARF 2 */\r
273   .debug_aranges  0 : { *(.debug_aranges) }\r
274   .debug_pubnames 0 : { *(.debug_pubnames) }\r
275   /* DWARF 2 */\r
276   .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }\r
277   .debug_abbrev   0 : { *(.debug_abbrev) }\r
278   .debug_line     0 : { *(.debug_line) }\r
279   .debug_frame    0 : { *(.debug_frame) }\r
280   .debug_str      0 : { *(.debug_str) }\r
281   .debug_loc      0 : { *(.debug_loc) }\r
282   .debug_macinfo  0 : { *(.debug_macinfo) }\r
283   /* DWARF 2.1 */\r
284   .debug_ranges   0 : { *(.debug_ranges) }\r
285   /* SGI/MIPS DWARF 2 extensions */\r
286   .debug_weaknames 0 : { *(.debug_weaknames) }\r
287   .debug_funcnames 0 : { *(.debug_funcnames) }\r
288   .debug_typenames 0 : { *(.debug_typenames) }\r
289   .debug_varnames  0 : { *(.debug_varnames) }\r
290 \r
291   .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }\r
292   .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) }\r
293   /DISCARD/ : { *(.note.GNU-stack) }\r
294 }\r
295 \r