]> git.sur5r.net Git - freertos/blob
ac89d115af0a7f4f7d080639c65bc78cbf605312
[freertos] /
1 GROUP (\r
2     "libgcc.a"\r
3     "libc_nano.a"\r
4     "libm.a"\r
5     "libcr_newlib_semihost.a"\r
6 )\r
7 \r
8 MEMORY\r
9 {\r
10     /* Define each memory region. */\r
11     PROGRAM_FLASH (rx)  : ORIGIN = 0x00010000, LENGTH = 0x72000 /* 456K bytes (alias Flash). */\r
12     Ram0 (rwx)          : ORIGIN = 0x20008000, LENGTH = 0x2b000 /* 172K bytes (alias RAM). */\r
13 }\r
14 \r
15 /* Define a symbol for the top of each memory region. */\r
16 __base_PROGRAM_FLASH  = 0x00010000;             /* PROGRAM_FLASH. */\r
17 __base_Flash          = 0x00010000;             /* Flash. */\r
18 __top_PROGRAM_FLASH   = 0x00010000 + 0x72000;   /* 456K bytes. */\r
19 __top_Flash           = 0x00010000 + 0x72000;   /* 456K bytes. */\r
20 \r
21 __base_Ram0           = 0x20008000;             /* Ram0. */\r
22 __base_RAM            = 0x20008000;             /* RAM. */\r
23 __top_Ram0            = 0x20008000 + 0x2b000;   /* 172K bytes. */\r
24 __top_RAM             = 0x20008000 + 0x2b000;   /* 172K bytes. */\r
25 \r
26 /* Entry point. */\r
27 ENTRY(ResetISR)\r
28 \r
29 SECTIONS\r
30 {\r
31     /* Vector Table Section. */\r
32     .text : ALIGN(4)\r
33     {\r
34         FILL(0xff)\r
35         __vectors_start__ = ABSOLUTE(.);\r
36         KEEP(*(.isr_vector))\r
37 \r
38         /* Global Section Table. */\r
39         . = ALIGN(4);\r
40         __section_table_start = .;\r
41 \r
42         __data_section_table = .;\r
43         LONG(LOADADDR(.data));\r
44         LONG(    ADDR(.data));\r
45         LONG(  SIZEOF(.data));\r
46         __data_section_table_end = .;\r
47 \r
48         __bss_section_table = .;\r
49         LONG(    ADDR(.bss));\r
50         LONG(  SIZEOF(.bss));\r
51         __bss_section_table_end = .;\r
52 \r
53         __section_table_end = .;\r
54         /* End of Global Section Table. */\r
55 \r
56         *(.after_vectors*)\r
57     } > PROGRAM_FLASH\r
58 \r
59     /* Privileged functions - Section needs to be 32 byte aligned to satisfy MPU requirements. */\r
60     .privileged_functions : ALIGN(32)\r
61     {\r
62         . = ALIGN(32);\r
63         __privileged_functions_start__ = .;\r
64         *(privileged_functions)\r
65         . = ALIGN(32);\r
66         /* End address must be the last address in the region, therefore, -1. */\r
67         __privileged_functions_end__ = . - 1;\r
68     } > PROGRAM_FLASH\r
69 \r
70     /* FreeRTOS System calls - Section needs to be 32 byte aligned to satisfy MPU requirements. */\r
71     .freertos_system_calls : ALIGN(32)\r
72     {\r
73         . = ALIGN(32);\r
74         __syscalls_flash_start__ = .;\r
75         *(freertos_system_calls)\r
76         . = ALIGN(32);\r
77         /* End address must be the last address in the region, therefore, -1. */\r
78         __syscalls_flash_end__ = . - 1;\r
79     } > PROGRAM_FLASH\r
80 \r
81     /* Main Text Section - Section needs to be 32 byte aligned to satisfy MPU requirements. */\r
82     .text : ALIGN(32)\r
83     {\r
84         . = ALIGN(32);\r
85         __unprivileged_flash_start__ = .;\r
86         *(.text*)\r
87         *(.rodata .rodata.* .constdata .constdata.*)\r
88         . = ALIGN(32);\r
89         /* End address must be the last address in the region, therefore, -1. */\r
90         __unprivileged_flash_end__ = . - 1;\r
91     } > PROGRAM_FLASH\r
92 \r
93     /* For exception handling/unwind - some Newlib functions (in common\r
94      * with C++ and StdC++) use this. */\r
95     .ARM.extab : ALIGN(4)\r
96     {\r
97         *(.ARM.extab* .gnu.linkonce.armextab.*)\r
98     } > PROGRAM_FLASH\r
99 \r
100     __exidx_start = .;\r
101     .ARM.exidx : ALIGN(4)\r
102     {\r
103         *(.ARM.exidx* .gnu.linkonce.armexidx.*)\r
104     } > PROGRAM_FLASH\r
105     __exidx_end = .;\r
106 \r
107     /* Text Section End. */\r
108     _etext = .;\r
109 \r
110     /* Uninit Reserved Section. */\r
111     .uninit_RESERVED : ALIGN(4)\r
112     {\r
113         KEEP(*(.bss.$RESERVED*))\r
114         . = ALIGN(4);\r
115         _end_uninit_RESERVED = .;\r
116     } > Ram0\r
117 \r
118     /* Main Data section (Ram0). */\r
119     .data : ALIGN(4)\r
120     {\r
121         FILL(0xff)\r
122         _data = .;\r
123 \r
124         /* Privileged data - It needs to be 32 byte aligned to satisfy MPU requirements. */\r
125         . = ALIGN(32);\r
126         __privileged_sram_start__ = .;\r
127         *(privileged_data);\r
128         . = ALIGN(32);\r
129         /* End address must be the last address in the region, therefore, -1. */\r
130         __privileged_sram_end__ = . - 1;\r
131 \r
132         *(vtable)\r
133         *(.ramfunc*)\r
134         *(.data*)\r
135         _edata = .;\r
136     } > Ram0 AT>PROGRAM_FLASH\r
137 \r
138     /* Main BSS Section. */\r
139     .bss : ALIGN(4)\r
140     {\r
141         _bss = .;\r
142         *(.bss*)\r
143         *(COMMON)\r
144         . = ALIGN(4);\r
145         _ebss = .;\r
146         PROVIDE(end = .);\r
147     } > Ram0\r
148 \r
149     /* Default Noinit Section. */\r
150     .noinit (NOLOAD) : ALIGN(4)\r
151     {\r
152         _noinit = .;\r
153         *(.noinit*)\r
154         . = ALIGN(4);\r
155         _end_noinit = .;\r
156     } > Ram0\r
157 \r
158     /* Reserve space and place heap in memory map. */\r
159     _HeapSize = 0x1000;\r
160     .heap : ALIGN(4)\r
161     {\r
162         _pvHeapStart = .;\r
163         . += _HeapSize;\r
164         . = ALIGN(4);\r
165         _pvHeapLimit = .;\r
166     } > Ram0\r
167 \r
168     /* Reserve space for stack in memory. */\r
169     _StackSize = 0x1000;\r
170     .heap2stackfill :\r
171     {\r
172         . += _StackSize;\r
173     } > Ram0\r
174 \r
175     /* Place actual stack in memory map. */\r
176     .stack ORIGIN(Ram0) + LENGTH(Ram0) - _StackSize - 0 :  ALIGN(4)\r
177     {\r
178         _vStackBase = .;\r
179         . = ALIGN(4);\r
180         _vStackTop = . + _StackSize;\r
181     } > Ram0\r
182 \r
183     /* Create checksum value (used in startup). */\r
184     PROVIDE(__valid_user_code_checksum = 0 -\r
185                                          (_vStackTop\r
186                                          + (ResetISR + 1)\r
187                                          + (NMI_Handler + 1)\r
188                                          + (HardFault_Handler + 1)\r
189                                          + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)   /* MemManage_Handler may not be defined. */\r
190                                          + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)     /* BusFault_Handler may not be defined. */\r
191                                          + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1) /* UsageFault_Handler may not be defined. */\r
192                                          ) );\r
193 \r
194     /* Provide basic symbols giving location and size of main text block,\r
195      * including initial values of RW data sections. Note that these will need\r
196      * extending to give a complete picture with complex images\r
197      * (e.g multiple Flash banks). */\r
198     _image_start    = LOADADDR(.text);\r
199     _image_end      = LOADADDR(.data) + SIZEOF(.data);\r
200     _image_size     = _image_end - _image_start;\r
201 }\r