]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/Secure/FreeRTOSDemo_s.ld
commit 9f316c246baafa15c542a5aea81a94f26e3d6507
[freertos] / FreeRTOS / Demo / CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso / Projects / MCUXpresso / Secure / FreeRTOSDemo_s.ld
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 = 0x10000000, LENGTH = 0xfe00 /* 63.5K bytes (alias Flash). */\r
12     SG_veneer_table (rx): ORIGIN = 0x1000fe00, LENGTH = 0x200  /* 0.5K bytes (alias Flash2). */\r
13     Ram0 (rwx)          : ORIGIN = 0x30000000, LENGTH = 0x8000 /* 32K bytes (alias RAM). */\r
14 }\r
15 \r
16 /* Define a symbol for the top of each memory region. */\r
17 __base_PROGRAM_FLASH    = 0x10000000;           /* PROGRAM_FLASH. */\r
18 __base_Flash            = 0x10000000;           /* Flash. */\r
19 __top_PROGRAM_FLASH     = 0x10000000 + 0xfe00;  /* 63.5K bytes */\r
20 __top_Flash             = 0x10000000 + 0xfe00;  /* 63.5K bytes */\r
21 \r
22 __base_SG_veneer_table  = 0x1000fe00;           /* SG_veneer_table. */\r
23 __base_Flash2           = 0x1000fe00;           /* Flash2. */\r
24 __top_SG_veneer_table   = 0x1000fe00 + 0x200;   /* 0.5K bytes. */\r
25 __top_Flash2            = 0x1000fe00 + 0x200;   /* 0.5K bytes. */\r
26 \r
27 __base_Ram0             = 0x30000000;           /* Ram0. */\r
28 __base_RAM              = 0x30000000;           /* RAM. */\r
29 __top_Ram0              = 0x30000000 + 0x8000;  /* 32K bytes. */\r
30 __top_RAM               = 0x30000000 + 0x8000;  /* 32K bytes. */\r
31 \r
32 /* Entry point. */\r
33 ENTRY(ResetISR)\r
34 \r
35 SECTIONS\r
36 {\r
37     /* Place TrustZone Secure Gateway Stubs Section in SG_veneer_table'\r
38      * (Non-Secure Callable) memory. */\r
39     .gnu.sgstubs : ALIGN (32)\r
40     {\r
41         . = ALIGN(32);\r
42         _start_sg = .;\r
43         *(.gnu.sgstubs*)\r
44         . = ALIGN(32);\r
45         _end_sg = .;\r
46     } > SG_veneer_table\r
47 \r
48     /* Veneer Table Section (Non-Secure Callable). */\r
49     .text_Flash2 : ALIGN(4)\r
50     {\r
51         FILL(0xff)\r
52         *(.text_Flash2)             /* For compatibility with previous releases. */\r
53         *(.text_SG_veneer_table)    /* For compatibility with previous releases. */\r
54         *(.text.$Flash2)\r
55         *(.text.$SG_veneer_table)\r
56         *(.text_Flash2.*)           /* For compatibility with previous releases. */\r
57         *(.text_SG_veneer_table.*)  /* For compatibility with previous releases. */\r
58         *(.text.$Flash2.*)\r
59         *(.text.$SG_veneer_table.*)\r
60         *(.rodata.$Flash2)\r
61         *(.rodata.$SG_veneer_table)\r
62         *(.rodata.$Flash2.*)\r
63         *(.rodata.$SG_veneer_table.*)\r
64     } > SG_veneer_table\r
65 \r
66     /* Vector Table Section. */\r
67     .text : ALIGN(4)\r
68     {\r
69         FILL(0xff)\r
70         __vectors_start__ = ABSOLUTE(.);\r
71         KEEP(*(.isr_vector))\r
72 \r
73         /* Global Section Table. */\r
74         . = ALIGN(4);\r
75         __section_table_start = .;\r
76 \r
77         __data_section_table = .;\r
78         LONG(LOADADDR(.data));\r
79         LONG(    ADDR(.data));\r
80         LONG(  SIZEOF(.data));\r
81         __data_section_table_end = .;\r
82 \r
83         __bss_section_table = .;\r
84         LONG(    ADDR(.bss));\r
85         LONG(  SIZEOF(.bss));\r
86         __bss_section_table_end = .;\r
87 \r
88         __section_table_end = .;\r
89         /* End of Global Section Table. */\r
90 \r
91         *(.after_vectors*)\r
92     } > PROGRAM_FLASH\r
93 \r
94     /* Main Text Section. */\r
95     .text : ALIGN(4)\r
96     {\r
97         *(.text*)\r
98         *(.rodata .rodata.* .constdata .constdata.*)\r
99         . = ALIGN(4);\r
100     } > PROGRAM_FLASH\r
101 \r
102     /* For exception handling/unwind - some Newlib functions (in common\r
103      * with C++ and STDC++) use this. */\r
104     .ARM.extab : ALIGN(4)\r
105     {\r
106         *(.ARM.extab* .gnu.linkonce.armextab.*)\r
107     } > PROGRAM_FLASH\r
108 \r
109     .ARM.exidx : ALIGN(4)\r
110     {\r
111         __exidx_start = .;\r
112         *(.ARM.exidx* .gnu.linkonce.armexidx.*)\r
113         __exidx_end = .;\r
114     } > PROGRAM_FLASH\r
115 \r
116     /* Text Section End. */\r
117     _etext = .;\r
118 \r
119     /* Uninit Reserved Section. */\r
120     .uninit_RESERVED : ALIGN(4)\r
121     {\r
122         _start_uninit_RESERVED = .;\r
123         KEEP(*(.bss.$RESERVED*))\r
124         . = ALIGN(4);\r
125         _end_uninit_RESERVED = .;\r
126     } > Ram0 AT>Ram0\r
127 \r
128     /* Main Data section (Ram0). */\r
129     .data : ALIGN(4)\r
130     {\r
131         FILL(0xff)\r
132         _data = .;\r
133         PROVIDE(__start_data_RAM = .);\r
134         PROVIDE(__start_data_Ram0 = .);\r
135         *(vtable)\r
136         *(.ramfunc*)\r
137         *(.data*)\r
138         . = ALIGN(4);\r
139         _edata = .;\r
140         PROVIDE(__end_data_RAM = .);\r
141         PROVIDE(__end_data_Ram0 = .);\r
142     } > Ram0 AT>PROGRAM_FLASH\r
143 \r
144     /* Main BSS Section. */\r
145     .bss : ALIGN(4)\r
146     {\r
147         _bss = .;\r
148         PROVIDE(__start_bss_RAM = .);\r
149         PROVIDE(__start_bss_Ram0 = .);\r
150         *(.bss*)\r
151         *(COMMON)\r
152         . = ALIGN(4);\r
153         _ebss = .;\r
154         PROVIDE(__end_bss_RAM = .);\r
155         PROVIDE(__end_bss_Ram0 = .);\r
156         PROVIDE(end = .);\r
157     } > Ram0 AT>Ram0\r
158 \r
159     /* Default Noinit Section. */\r
160     .noinit (NOLOAD) : ALIGN(4)\r
161     {\r
162         _noinit = .;\r
163         PROVIDE(__start_noinit_RAM = .);\r
164         PROVIDE(__start_noinit_Ram0 = .);\r
165         *(.noinit*)\r
166         . = ALIGN(4);\r
167         _end_noinit = .;\r
168         PROVIDE(__end_noinit_RAM = .);\r
169         PROVIDE(__end_noinit_Ram0 = .);\r
170     } > Ram0 AT>Ram0\r
171 \r
172     /* Reserve space and place heap in memory map. */\r
173     _HeapSize = 0x800;\r
174     .heap : ALIGN(4)\r
175     {\r
176         _pvHeapStart = .;\r
177         . += _HeapSize;\r
178         . = ALIGN(4);\r
179         _pvHeapLimit = .;\r
180     } > Ram0\r
181 \r
182     /* Reserve space for stack in memory. */\r
183     _StackSize = 0x800;\r
184     .heap2stackfill :\r
185     {\r
186         . += _StackSize;\r
187     } > Ram0\r
188 \r
189     /* Place actual stack in memory map. */\r
190     .stack ORIGIN(Ram0) + LENGTH(Ram0) - _StackSize - 0 :  ALIGN(4)\r
191     {\r
192         _vStackBase = .;\r
193         . = ALIGN(4);\r
194         _vStackTop = . + _StackSize;\r
195     } > Ram0\r
196 \r
197     /* Create checksum value (used in startup). */\r
198     PROVIDE(__valid_user_code_checksum = 0 -\r
199                                          (_vStackTop\r
200                                          + (ResetISR + 1)\r
201                                          + (NMI_Handler + 1)\r
202                                          + (HardFault_Handler + 1)\r
203                                          + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)   /* MemManage_Handler may not be defined. */\r
204                                          + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)     /* BusFault_Handler may not be defined. */\r
205                                          + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1) /* UsageFault_Handler may not be defined. */\r
206                                          ) );\r
207 \r
208     /* Provide basic symbols giving location and size of main text block,\r
209      * including initial values of RW data sections. Note that these will need\r
210      * extending to give a complete picture with complex images\r
211      * (e.g multiple Flash banks). */\r
212     _image_start    = LOADADDR(.text);\r
213     _image_end      = LOADADDR(.data) + SIZEOF(.data);\r
214     _image_size     = _image_end - _image_start;\r
215 }\r