]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_MPU_M33F_NXP_LPC55S69_MCUXpresso/Projects/MCUXpresso/Secure/FreeRTOSDemo_s.ld
91959cca8a74876160c65eef6c42219182012e5f
[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     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_veneer_table     = 0x1000fe00;           /* veneer_table. */\r
23 __base_Flash2           = 0x1000fe00;           /* Flash2. */\r
24 __top_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     /* Veneer Table Section (Non-Secure Callable). */\r
38     .text_Flash2 : ALIGN(4)\r
39     {\r
40         FILL(0xff)\r
41         *(.text_Flash2*) /* For compatibility with previous releases. */\r
42         *(.text_veneer_table*) /* For compatibility with previous releases. */\r
43         *(.text.$Flash2*)\r
44         *(.text.$veneer_table*)\r
45         *(.rodata.$Flash2*)\r
46         *(.rodata.$veneer_table*)\r
47     } > veneer_table\r
48 \r
49     /* Vector Table Section. */\r
50     .text : ALIGN(4)\r
51     {\r
52         FILL(0xff)\r
53         __vectors_start__ = ABSOLUTE(.);\r
54         KEEP(*(.isr_vector))\r
55 \r
56         /* Global Section Table. */\r
57         . = ALIGN(4);\r
58         __section_table_start = .;\r
59 \r
60         __data_section_table = .;\r
61         LONG(LOADADDR(.data));\r
62         LONG(    ADDR(.data));\r
63         LONG(  SIZEOF(.data));\r
64         __data_section_table_end = .;\r
65 \r
66         __bss_section_table = .;\r
67         LONG(    ADDR(.bss));\r
68         LONG(  SIZEOF(.bss));\r
69         __bss_section_table_end = .;\r
70 \r
71         __section_table_end = .;\r
72         /* End of Global Section Table. */\r
73 \r
74         *(.after_vectors*)\r
75     } > PROGRAM_FLASH\r
76 \r
77     /* Main Text Section. */\r
78     .text : ALIGN(4)\r
79     {\r
80         *(.text*)\r
81         *(.rodata .rodata.* .constdata .constdata.*)\r
82         . = ALIGN(4);\r
83     } > PROGRAM_FLASH\r
84 \r
85     /* For exception handling/unwind - some Newlib functions (in common\r
86      * with C++ and STDC++) use this. */\r
87     .ARM.extab : ALIGN(4)\r
88     {\r
89         *(.ARM.extab* .gnu.linkonce.armextab.*)\r
90     } > PROGRAM_FLASH\r
91 \r
92     __exidx_start = .;\r
93     .ARM.exidx : ALIGN(4)\r
94     {\r
95         *(.ARM.exidx* .gnu.linkonce.armexidx.*)\r
96     } > PROGRAM_FLASH\r
97     __exidx_end = .;\r
98 \r
99     /* TrustZone Secure Gateway Stubs Section. */\r
100     .gnu.sgstubs : ALIGN (32)\r
101     {\r
102         . = ALIGN(32);\r
103         _start_sg = .;\r
104         *(.gnu.sgstubs*)\r
105         . = ALIGN(32);\r
106         _end_sg = .;\r
107     } > PROGRAM_FLASH\r
108 \r
109     /* Text Section End. */\r
110     _etext = .;\r
111 \r
112     /* Uninit Reserved Section. */\r
113     .uninit_RESERVED : ALIGN(4)\r
114     {\r
115         KEEP(*(.bss.$RESERVED*))\r
116         . = ALIGN(4);\r
117         _end_uninit_RESERVED = .;\r
118     } > Ram0\r
119 \r
120     /* Main Data section (Ram0). */\r
121     .data : ALIGN(4)\r
122     {\r
123         FILL(0xff)\r
124         _data = .;\r
125         *(vtable)\r
126         *(.ramfunc*)\r
127         *(.data*)\r
128         . = ALIGN(4);\r
129         _edata = .;\r
130     } > Ram0 AT>PROGRAM_FLASH\r
131 \r
132     /* Main BSS Section. */\r
133     .bss : ALIGN(4)\r
134     {\r
135         _bss = .;\r
136         *(.bss*)\r
137         *(COMMON)\r
138         . = ALIGN(4);\r
139         _ebss = .;\r
140         PROVIDE(end = .);\r
141     } > Ram0\r
142 \r
143     /* Default Noinit Section. */\r
144     .noinit (NOLOAD) : ALIGN(4)\r
145     {\r
146         _noinit = .;\r
147         *(.noinit*)\r
148         . = ALIGN(4);\r
149         _end_noinit = .;\r
150     } > Ram0\r
151 \r
152     /* Reserve space and place heap in memory map. */\r
153     _HeapSize = 0x800;\r
154     .heap : ALIGN(4)\r
155     {\r
156         _pvHeapStart = .;\r
157         . += _HeapSize;\r
158         . = ALIGN(4);\r
159         _pvHeapLimit = .;\r
160     } > Ram0\r
161 \r
162     /* Reserve space for stack in memory. */\r
163     _StackSize = 0x800;\r
164     .heap2stackfill :\r
165     {\r
166         . += _StackSize;\r
167     } > Ram0\r
168 \r
169     /* Place actual stack in memory map. */\r
170     .stack ORIGIN(Ram0) + LENGTH(Ram0) - _StackSize - 0 :  ALIGN(4)\r
171     {\r
172         _vStackBase = .;\r
173         . = ALIGN(4);\r
174         _vStackTop = . + _StackSize;\r
175     } > Ram0\r
176 \r
177     /* Create checksum value (used in startup). */\r
178     PROVIDE(__valid_user_code_checksum = 0 -\r
179                                          (_vStackTop\r
180                                          + (ResetISR + 1)\r
181                                          + (NMI_Handler + 1)\r
182                                          + (HardFault_Handler + 1)\r
183                                          + (( DEFINED(MemManage_Handler) ? MemManage_Handler : 0 ) + 1)   /* MemManage_Handler may not be defined. */\r
184                                          + (( DEFINED(BusFault_Handler) ? BusFault_Handler : 0 ) + 1)     /* BusFault_Handler may not be defined. */\r
185                                          + (( DEFINED(UsageFault_Handler) ? UsageFault_Handler : 0 ) + 1) /* UsageFault_Handler may not be defined. */\r
186                                          ) );\r
187 \r
188     /* Provide basic symbols giving location and size of main text block,\r
189      * including initial values of RW data sections. Note that these will need\r
190      * extending to give a complete picture with complex images\r
191      * (e.g multiple Flash banks). */\r
192     _image_start    = LOADADDR(.text);\r
193     _image_end      = LOADADDR(.data) + SIZEOF(.data);\r
194     _image_size     = _image_end - _image_start;\r
195 }\r