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
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
20 // Code memory in flash
\r
21 -DROMSTART=0x00000000
\r
26 -DRAMSTART=0x4000000
\r
30 //*************************************************************************
\r
31 // In this file it is assumed that the system has the following
\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
39 // Code segments - may be placed anywhere in memory.
\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
51 // Data segments - may be placed anywhere in memory.
\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
59 // HEAP -- The heap used by malloc and free in C and new and
\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
67 // Where _y can be one of:
\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
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
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
87 //************************************************
\r
88 // Inform the linker about the CPU family used.
\r
89 //************************************************
\r
93 //*************************************************************************
\r
94 // Segment placement - General information
\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
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
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
114 //*************************************************************************
\r
115 // Read-only segments mapped to ROM.
\r
116 //*************************************************************************
\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
126 -Z(CODE)INTVEC=ROMSTART-ROMEND
\r
128 //************************************************
\r
129 // Startup code and exception routines (ICODE).
\r
130 //************************************************
\r
132 -Z(CODE)ICODE,DIFUNCT=ROMSTART-ROMEND
\r
133 -Z(CODE)SWITAB=ROMSTART-ROMEND
\r
135 //************************************************
\r
136 // Code segments may be placed anywhere.
\r
137 //************************************************
\r
139 -Z(CODE)CODE=ROMSTART-ROMEND
\r
141 //************************************************
\r
142 // Original ROM location for __ramfunc code copied
\r
143 // to and executed from RAM.
\r
144 //************************************************
\r
146 -Z(CONST)CODE_ID=ROMSTART-ROMEND
\r
148 //************************************************
\r
149 // Various constants and initializers.
\r
150 //************************************************
\r
152 -Z(CONST)INITTAB,DATA_ID,DATA_C=ROMSTART-ROMEND
\r
153 -Z(CONST)CHECKSUM=ROMSTART-ROMEND
\r
156 //*************************************************************************
\r
157 // Read/write segments mapped to RAM.
\r
158 //*************************************************************************
\r
160 //************************************************
\r
162 //************************************************
\r
164 -Z(DATA)DATA_I,DATA_Z,DATA_N=RAMSTART-RAMEND
\r
166 //************************************************
\r
167 // __ramfunc code copied to and executed from RAM.
\r
168 //************************************************
\r
170 -Z(DATA)CODE_I=RAMSTART-RAMEND
\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
183 //*************************************************************************
\r
184 // Stack and heap segments.
\r
185 //*************************************************************************
\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
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
203 //*************************************************************************
\r
204 // ELF/DWARF support.
\r
206 // Uncomment the line "-Felf" below to generate ELF/DWARF output.
\r
207 // Available format specifiers are:
\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
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