]> git.sur5r.net Git - freertos/blob - Demo/ARM9_STR91X_IAR/lnkarm_flash.xcl
Changes between V4.5.0 and V4.6.0 released October 28 2007
[freertos] / Demo / ARM9_STR91X_IAR / lnkarm_flash.xcl
1 /*;******************** (C) COPYRIGHT 2005 STMicroelectronics **************************\r
2 ;* File Name          : lnkarm_ram.xcl\r
3 ;* Author             : MCD Application Team\r
4 ;* Date First Issued  : 09/27/2005 :  V1.0\r
5 ;* Description        : XLINK command file for EWARM/ICCARM\r
6 ;*                    : Usage:  xlink  -f lnkarm  <your_object_file(s)>\r
7 ;*                    : -s <program start label>  <C/C++ runtime library>\r
8 ;*************************************************************************************\r
9 ;* History:\r
10 ;* 09/27/2005 :  V1.0\r
11 ;*************************************************************************************\r
12 ; THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
13 ; WITH  CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
14 ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT\r
15 ; OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT\r
16 ; OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION\r
17 ; CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
18 ;*************************************************************************************/\r
19 \r
20 // Code memory in flash\r
21 -DROMSTART=0x00000000\r
22 -DROMEND=0x00080000\r
23 -DVECSTART=ROMSTART\r
24 \r
25 // Data memory\r
26 -DRAMSTART=0x4000000\r
27 -DRAMEND=0x04018000\r
28 \r
29 \r
30 //*************************************************************************\r
31 // In this file it is assumed that the system has the following\r
32 // memory layout:\r
33 //\r
34 //   Exception vectors [0x000000--0x00001F]  RAM or ROM\r
35 //   ROMSTART--ROMEND  [0x008000--0x0FFFFF]  ROM (or other non-volatile memory)\r
36 //   RAMSTART--RAMEND  [0x100000--0x7FFFFF]  RAM (or other read/write memory)\r
37 //\r
38 // -------------\r
39 // Code segments - may be placed anywhere in memory.\r
40 // -------------\r
41 //\r
42 //   INTVEC     -- Exception vector table.\r
43 //   SWITAB     -- Software interrupt vector table.\r
44 //   ICODE      -- Startup (cstartup) and exception code.\r
45 //   DIFUNCT    -- Dynamic initialization vectors used by C++.\r
46 //   CODE       -- Compiler generated code.\r
47 //   CODE_I     -- Compiler generated code declared __ramfunc (executes in RAM)\r
48 //   CODE_ID    -- Initializer for CODE_I (ROM).\r
49 //\r
50 // -------------\r
51 // Data segments - may be placed anywhere in memory.\r
52 // -------------\r
53 //\r
54 //   CSTACK     -- The stack used by C/C++ programs (system and user mode).\r
55 //   IRQ_STACK  -- The stack used by IRQ service routines.\r
56 //   SVC_STACK  -- The stack used in supervisor mode\r
57 //                 (Define other exception stacks as needed for\r
58 //                 FIQ, ABT, UND).\r
59 //   HEAP       -- The heap used by malloc and free in C and new and\r
60 //                 delete in C++.\r
61 //   INITTAB    -- Table containing addresses and sizes of segments that\r
62 //                 need to be initialized at startup (by cstartup).\r
63 //   CHECKSUM   -- The linker places checksum byte(s) in this segment,\r
64 //                 when the -J linker command line option is used.\r
65 //   DATA_y     -- Data objects.\r
66 //\r
67 // Where _y can be one of:\r
68 //\r
69 //   _AN        -- Holds uninitialized located objects, i.e. objects with\r
70 //                 an absolute location given by the @ operator or the\r
71 //                 #pragma location directive. Since these segments\r
72 //                 contain objects which already have a fixed address,\r
73 //                 they should not be mentioned in this linker command\r
74 //                 file.\r
75 //   _C         -- Constants (ROM).\r
76 //   _I         -- Initialized data (RAM).\r
77 //   _ID        -- The original content of _I (copied to _I by cstartup) (ROM).\r
78 //   _N         -- Uninitialized data (RAM).\r
79 //   _Z         -- Zero initialized data (RAM).\r
80 //\r
81 // Note:  Be sure to use end values for the defined address ranges.\r
82 //        Otherwise, the linker may allocate space outside the\r
83 //        intended memory range.\r
84 //*************************************************************************\r
85 \r
86 \r
87 //************************************************\r
88 // Inform the linker about the CPU family used.\r
89 //************************************************\r
90 \r
91 -carm\r
92 \r
93 //*************************************************************************\r
94 // Segment placement - General information\r
95 //\r
96 // All numbers in the segment placement command lines below are interpreted\r
97 // as hexadecimal unless they are immediately preceded by a '.', which\r
98 // denotes decimal notation.\r
99 //\r
100 // When specifying the segment placement using the -P instead of the -Z\r
101 // option, the linker is free to split each segment into its segment parts\r
102 // and randomly place these parts within the given ranges in order to\r
103 // achieve a more efficient memory usage. One disadvantage, however, is\r
104 // that it is not possible to find the start or end address (using\r
105 // the assembler operators .sfb./.sfe.) of a segment which has been split\r
106 // and reformed.\r
107 //\r
108 // When generating an output file which is to be used for programming\r
109 // external ROM/Flash devices, the -M linker option is very useful\r
110 // (see xlink.pdf for details).\r
111 //*************************************************************************\r
112 \r
113 \r
114 //*************************************************************************\r
115 // Read-only segments mapped to ROM.\r
116 //*************************************************************************\r
117 \r
118 //************************************************\r
119 // Address range for reset and exception\r
120 // vectors (INTVEC).\r
121 // The vector area is 32 bytes,\r
122 // an additional 32 bytes is allocated for the\r
123 // constant table used by ldr PC in cstartup.s79.\r
124 //************************************************\r
125 \r
126 -Z(CODE)INTVEC=ROMSTART-ROMEND\r
127 \r
128 //************************************************\r
129 // Startup code and exception routines (ICODE).\r
130 //************************************************\r
131 \r
132 -Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND\r
133 -Z(CODE)SWITAB=ROMSTART-ROMEND\r
134 \r
135 //************************************************\r
136 // Code segments may be placed anywhere.\r
137 //************************************************\r
138 \r
139 -Z(CODE)CODE=ROMSTART-ROMEND\r
140 \r
141 //************************************************\r
142 // Original ROM location for __ramfunc code copied\r
143 // to and executed from RAM.\r
144 //************************************************\r
145 \r
146 -Z(CONST)CODE_ID=ROMSTART-ROMEND\r
147 \r
148 //************************************************\r
149 // Various constants and initializers.\r
150 //************************************************\r
151 \r
152 -Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND\r
153 -Z(CONST)CHECKSUM=ROMSTART-ROMEND\r
154 \r
155 \r
156 //*************************************************************************\r
157 // Read/write segments mapped to RAM.\r
158 //*************************************************************************\r
159 \r
160 //************************************************\r
161 // Data segments.\r
162 //************************************************\r
163 \r
164 -Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND\r
165 \r
166 //************************************************\r
167 // __ramfunc code copied to and executed from RAM.\r
168 //************************************************\r
169 \r
170 -Z(DATA)CODE_I=RAMSTART-RAMEND\r
171 \r
172 //************************************************\r
173 // ICCARM produces code for __ramfunc functions in\r
174 // CODE_I segments. The -Q XLINK command line\r
175 // option redirects XLINK to emit the code in the\r
176 // CODE_ID segment instead, but to keep symbol and\r
177 // debug information associated with the CODE_I\r
178 // segment, where the code will execute.\r
179 //************************************************\r
180 \r
181 -QCODE_I=CODE_ID\r
182 \r
183 //*************************************************************************\r
184 // Stack and heap segments.\r
185 //*************************************************************************\r
186 \r
187 //-D_CSTACK_SIZE=0x1000\r
188 //-D_SVC_STACK_SIZE=0x100\r
189 //-D_IRQ_STACK_SIZE=0x400\r
190 //-D_FIQ_STACK_SIZE=0x40\r
191 //-D_ABT_STACK_SIZE=0x40\r
192 //-D_UND_STACK_SIZE=0x40\r
193 //-D_HEAP_SIZE=0x400\r
194 \r
195 //-Z(DATA)CSTACK+_CSTACK_SIZE=RAMSTART-RAMEND\r
196 //-Z(DATA)SVC_STACK+_SVC_STACK_SIZE=RAMSTART-RAMEND\r
197 //-Z(DATA)ABT_STACK+_ABT_STACK_SIZE=RAMSTART-RAMEND\r
198 //-Z(DATA)UND_STACK+_UND_STACK_SIZE=RAMSTART-RAMEND\r
199 //-Z(DATA)FIQ_STACK+_FIQ_STACK_SIZE=RAMSTART-RAMEND\r
200 //-Z(DATA)IRQ_STACK+_IRQ_STACK_SIZE=RAMSTART-RAMEND\r
201 //-Z(DATA)HEAP+_HEAP_SIZE=RAMSTART-RAMEND\r
202 \r
203 //*************************************************************************\r
204 // ELF/DWARF support.\r
205 //\r
206 // Uncomment the line "-Felf" below to generate ELF/DWARF output.\r
207 // Available format specifiers are:\r
208 //\r
209 //   "-yn": Suppress DWARF debug output\r
210 //   "-yp": Multiple ELF program sections\r
211 //   "-yas": Format suitable for debuggers from ARM Ltd (also sets -p flag)\r
212 //\r
213 // "-Felf" and the format specifiers can also be supplied directly as\r
214 // command line options, or selected from the Xlink Output tab in the\r
215 // IAR Embedded Workbench.\r
216 //*************************************************************************\r
217 \r
218 // -Felf\r