source: atk2-sc3_fl850f1l/arch/ghs/ldscript.tf@ 117

Last change on this file since 117 was 117, checked in by ertl-ishikawa, 9 years ago

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

File size: 11.8 KB
Line 
1$
2$ TOPPERS ATK2
3$ Toyohashi Open Platform for Embedded Real-Time Systems
4$ Automotive Kernel Version 2
5$
6$ Copyright (C) 2007-2013 by Center for Embedded Computing Systems
7$ Graduate School of Information Science, Nagoya Univ., JAPAN
8$ Copyright (C) 2011-2013 by FUJISOFT INCORPORATED, JAPAN
9$ Copyright (C) 2011-2013 by FUJITSU VLSI LIMITED, JAPAN
10$ Copyright (C) 2011-2013 by NEC Communication Systems, Ltd., JAPAN
11$ Copyright (C) 2011-2013 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
12$ Copyright (C) 2011-2013 by Renesas Electronics Corporation, JAPAN
13$ Copyright (C) 2011-2013 by Sunny Giken Inc., JAPAN
14$ Copyright (C) 2011-2013 by TOSHIBA CORPORATION, JAPAN
15$ Copyright (C) 2011-2013 by Witz Corporation, JAPAN
16$
17$ 上記著作権者は,以下の(1)(4)の条件を満たす場合に限り,本ソフトウェ
18$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
19$ 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
20$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
21$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
22$ スコード中に含まれていること.
23$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
24$ 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
25$ 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
26$ の無保証規定を掲載すること.
27$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28$ 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
29$ と.
30$ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
31$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
32$ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
33$ 報告すること.
34$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
35$ 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
36$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
37$ 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
38$ 免責すること.
39$
40$ AUTOSAR(AUTomotive Open System ARchitecture)は,AUTOSAR仕様に基づ
41$ いたソフトウェアを商用目的で利用する者に対して,AUTOSARパートナーに
42$ なることを求めている.
43$
44$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
45$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
46$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
47$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
48$ の責任を負わない.
49$
50$ $Id: ldscript.tf 115 2014-12-10 01:33:17Z t_ishikawa $
51$
52
53$ =====================================================================
54$ 仮のリンカスクリプト(cfg2_out.ld)の生成
55$ =====================================================================
56
57$
58$ 生成するファイルの指定
59$
60$FILE "cfg2_out.ld"$
61
62$
63$ ターゲット依存のOUTPUT記述の生成
64$
65$IF ISFUNCTION("GENERATE_OUTPUT")$
66 $GENERATE_OUTPUT()$
67$END$
68
69
70$
71$ MEMORY記述の生成
72$
73MEMORY {$NL$
74$FOREACH reg REG.ORDER_LIST$
75 $TAB$$FORMAT("%s : ORIGIN = 0x%x, LENGTH = 0x%x",
76 REG.REGNAME[reg], +REG.BASE[reg], +REG.SIZE[reg])$$NL$
77$END$
78$IF ISFUNCTION("GENERATE_MEMORY")$
79 $GENERATE_MEMORY()$
80$END$
81}$NL$
82$NL$
83
84$
85$ 変数の初期化
86$
87$reset_lma = 0$
88
89$provide_gp = 0$
90$data_flg = 0$
91
92$
93$ リンク指定の生成
94$
95SECTIONS {$NL$
96$
97$ ターゲット依存のPROVIDE記述の生成
98$
99$IF ISFUNCTION("GENERATE_PROVIDE")$
100 $GENERATE_PROVIDE()$
101$END$
102
103$ ターゲット依存のセクション記述の生成
104$IF ISFUNCTION("GENERATE_SECTION_FIRST")$
105 $GENERATE_SECTION_FIRST()$
106$END$
107
108$IF TOPPERS_LABEL_ASM$
109 $PREFIX_START = "___start_"$
110 $PREFIX_END = "___end_"$
111 $PREFIX_LIMIT = "___limit_"$
112$ELSE$
113 $PREFIX_START = "__start_"$
114 $PREFIX_END = "__end_"$
115 $PREFIX_LIMIT = "__limit_"$
116$END$
117
118$FOREACH moid MO_ORDER$
119 $IF MO.LINKER[moid]$
120$ // セクションの開始記述の生成
121 $IF (MO.SEFLAG[moid] & 0x01) != 0$
122 $data_flg = 0$
123$ // small data section の先頭に.rosdataセクションを配置するための
124$ // ダミーセクション配置
125 $IF (MO.SEFLAG[moid] & 0x400) != 0$
126 $TAB$.rosdata : {$NL$
127$ // .rosdataを削除させないためのダミーデータ領域
128 $TAB$$TAB$. += $TARGET_PAGE_SIZE_STR$;$NL$
129 $TAB$} > $REG.REGNAME[STANDARD_RAM]$$NL$
130 $NL$$NL$
131 $END$
132$ // .idataセクションを配置するためのダミーセクション配置
133$ // およびアライン記述
134 $IF !OMIT_IDATA && !EQ(MO.ILABEL[moid], "")$
135 $IF !LENGTH(pre_data_ilabel)$
136 $TAB$.dummy.$MO.SLABEL[moid]$.rom : {$NL$
137 $TAB$$TAB$. = ALIGN($TARGET_SEC_ALIGN_STR$);$NL$
138 $TAB$$TAB$$PREFIX_START$$MO.ILABEL[moid]$ = .;$NL$
139 $TAB$} > $REG.REGNAME[STANDARD_ROM]$$NL$
140 $ELSE$
141 $TAB$$PREFIX_START$$MO.ILABEL[moid]$ = $PREFIX_END$$pre_data_slabel$ - $PREFIX_START$$pre_data_slabel$ + $PREFIX_START$$pre_data_ilabel$;$NL$
142 $END$
143 $TAB$.dummy.$MO.SLABEL[moid]$.ram : {$NL$
144 $IF LENGTH(preid) && (MO.SEFLAG[preid] & 0x20) != 0$
145 $TAB$$TAB$. = ALIGN($TARGET_PAGE_SIZE_STR$);$NL$
146 $ELSE$
147 $TAB$$TAB$. = ALIGN($TARGET_SEC_SIZE_STR$);$NL$
148 $END$
149 $TAB$$TAB$$PREFIX_START$$MO.SLABEL[moid]$ = .;$NL$
150 $TAB$} > $REG.REGNAME[STANDARD_RAM]$$NL$
151 $data_flg = 1$
152 $pre_data_ilabel = MO.ILABEL[moid]$
153 $pre_data_slabel = MO.SLABEL[moid]$
154 $END$
155 $TAB$.$MO.SLABEL[moid]$$SPC$
156 $IF (MO.SEFLAG[moid] & 0x40) == 0 && data_flg == 0$
157 ALIGN($TARGET_SEC_ALIGN_STR$)$SPC$
158 $ELIF data_flg == 1$
159 ($PREFIX_START$$MO.SLABEL[moid]$)$SPC$
160 $END$
161 $IF (MO.MEMATR[moid] & TA_NOWRITE) == 0
162 && (MO.MEMATR[moid] & TA_MEMINI) == 0$
163 (NOLOAD)$SPC$
164 $END$
165 :$SPC$
166 $IF !OMIT_IDATA && !EQ(MO.ILABEL[moid], "")$
167 AT($PREFIX_START$$MO.ILABEL[moid]$)$SPC$
168 $END$
169 {$NL$
170 $END$
171
172$ // セクションとメモリオブジェクトの開始ラベルの生成
173 $IF (MO.SEFLAG[moid] & 0x400) != 0$
174 $IF ISFUNCTION("GENERATE_GP_LABEL")$
175 $GENERATE_GP_LABEL()$
176 $END$
177 $END$
178 $IF (MO.SEFLAG[moid] & 0x100) != 0$
179 $IF (MO.MEMATR[moid] & TA_SDATA) == 0$
180 $TAB$$TAB$$PREFIX_START$srpw_all = .;$NL$
181 $ELSE$
182 $TAB$$TAB$$PREFIX_START$ssrpw_all = .;$NL$
183 $END$
184 $END$
185 $IF (MO.SEFLAG[moid] & 0x10) != 0$
186 $IF !EQ(MO.PLABEL[moid], "")$
187 $TAB$$TAB$$PREFIX_START$$MO.PLABEL[moid]$ = .;$NL$
188 $END$
189 $END$
190 $IF (MO.SEFLAG[moid] & 0x01) != 0$
191$ // =begin added for ghs
192 $IF !EQ(MO.SLABEL[moid], ALT(omit_start_slabel,""))$
193 $IF data_flg == 0$
194 $TAB$$TAB$$PREFIX_START$$MO.SLABEL[moid]$ = .;$NL$
195 $END$
196 $END$
197$ // =end added for ghs
198 $END$
199 $IF (MO.SEFLAG[moid] & 0x04) != 0$
200 $IF (MO.SEFLAG[moid] & 0x01) == 0$
201 $NL$
202 $END$
203 $IF !EQ(MO.MLABEL[moid], MO.SLABEL[moid])
204 && !EQ(MO.MLABEL[moid], ALT(omit_start_mlabel,""))$
205 $TAB$$TAB$$PREFIX_START$$MO.MLABEL[moid]$ = .;$NL$
206 $END$
207 $TAB$$TAB$
208 $END$
209
210$ // リンクするファイル記述の生成
211 $section_dscr = SECTION_DESCRIPTION(MO.SECTION[moid])$
212 $IF MO.TYPE[moid] == TOPPERS_ATTMOD$
213 $IF EQ(MO.MODULE[moid], "kernel_mem.o")$
214 kernel_mem2.o($MO.SECTION[moid]$)$SPC$
215 kernel_mem2.o($section_dscr$)$SPC$
216 $ELSE$
217 $module_name = REGEX_REPLACE(MO.MODULE[moid],"\.a$","\.a(\*")$
218 $module_name$($MO.SECTION[moid]$)
219 $IF !EQ(MO.MODULE[moid], module_name)$
220 )
221 $END$
222 $SPC$
223 $module_name$($section_dscr$)
224 $IF !EQ(MO.MODULE[moid], module_name)$
225 )
226 $END$
227 $SPC$
228 $END$
229 $ELIF MO.TYPE[moid] == TOPPERS_ATTSEC$
230 *($MO.SECTION[moid]$)$SPC$
231 *($section_dscr$)$SPC$
232 $ELSE$
233$ // ユーザスタック領域
234 Os_Lcfg.o($section_dscr$)$SPC$
235 $END$
236
237$ // セクションとメモリオブジェクトの終了ラベルの生成
238 $IF (MO.SEFLAG[moid] & 0x08) != 0$
239 $NL$
240 $IF !EQ(MO.MLABEL[moid], MO.SLABEL[moid])$
241 $TAB$$TAB$$PREFIX_END$$MO.MLABEL[moid]$ = .;$NL$
242 $END$
243 $END$
244 $IF (MO.SEFLAG[moid] & 0x02) != 0$
245 $TAB$$TAB$$PREFIX_END$$MO.SLABEL[moid]$ = .;$NL$
246 $END$
247 $IF (MO.SEFLAG[moid] & 0x200) != 0$
248 $IF (MO.MEMATR[moid] & TA_SDATA) == 0$
249 $TAB$$TAB$$PREFIX_END$srpw_all = .;$NL$
250 $ELSE$
251 $TAB$$TAB$$PREFIX_END$ssrpw_all = .;$NL$
252 $END$
253 $END$
254
255$ // セクションの終了記述の生成
256 $IF (MO.SEFLAG[moid] & 0x02) != 0$
257 $TAB$} > $REG.REGNAME[MO.MEMREG[moid]]$
258 $IF !OMIT_IDATA$
259 $IF !EQ(MO.ILABEL[moid], "")$
260 $SPC$
261 $reset_lma = 1$
262 $ELIF reset_lma$
263 $SPC$
264 $reset_lma = 0$
265 $END$
266 $END$
267 $IF ISFUNCTION("TARGET_CODE_FILLER")$
268 $TARGET_CODE_FILLER(moid)$
269 $END$
270 $NL$
271$ // =begin deleted for ghs
272$ $IF !OMIT_IDATA && !EQ(MO.ILABEL[moid], "")$
273$ $TAB$$PREFIX_START$$MO.ILABEL[moid]$ = LOADADDR(.$MO.SLABEL[moid]$);$NL$
274$ $END$
275$ // =end deleted for ghs
276 $END$
277
278$ // アライン記述の生成
279 $IF (MO.SEFLAG[moid] & 0x20) != 0$
280 $TAB$. = ALIGN($TARGET_PAGE_SIZE_STR$);$NL$
281 $ELIF (MO.SEFLAG[moid] & 0x02) != 0$
282$ // セクションが継続している場合には,TABを1つ出力
283 $IF (MO.SEFLAG[moid] & 0x02) == 0$$TAB$$END$
284 $TAB$. = ALIGN($TARGET_SEC_ALIGN_STR$);$NL$
285 $END$
286
287$ // セクションとメモリオブジェクトの上限ラベルの生成
288 $IF (MO.SEFLAG[moid] & 0x08) != 0$
289 $IF !EQ(MO.MLABEL[moid], MO.SLABEL[moid])$
290$ // セクションが継続している場合には,TABを1つ出力
291 $IF (MO.SEFLAG[moid] & 0x02) == 0$$TAB$$END$
292 $TAB$$PREFIX_LIMIT$$MO.MLABEL[moid]$ = .;$NL$
293 $END$
294 $END$
295 $IF (MO.SEFLAG[moid] & 0x02) != 0$
296 $TAB$$PREFIX_LIMIT$$MO.SLABEL[moid]$ = .;$NL$
297 $END$
298 $IF (MO.SEFLAG[moid] & 0x20) != 0$
299 $IF !EQ(MO.PLABEL[moid], "")$
300 $TAB$$PREFIX_LIMIT$$MO.PLABEL[moid]$ = .;$NL$
301 $END$
302 $END$
303 $IF (MO.SEFLAG[moid] & 0x200) != 0$
304 $IF (MO.MEMATR[moid] & TA_SDATA) == 0$
305 $TAB$$PREFIX_LIMIT$srpw_all = .;$NL$
306 $ELSE$
307 $TAB$$PREFIX_LIMIT$ssrpw_all = .;$NL$
308 $END$
309 $END$
310
311 $IF (MO.SEFLAG[moid] & 0x02) != 0$
312 $NL$
313 $END$
314
315$ // メモリリージョン末でアラインさせるためのダミーセクションの生成
316 $IF (MO.SEFLAG[moid] & 0x80) != 0$
317 $TAB$.$REG.REGNAME[MO.MEMREG[moid]]$_align$SPC$
318 ALIGN($TARGET_SEC_ALIGN_STR$) : {$NL$
319 $TAB$$TAB$__$REG.REGNAME[MO.MEMREG[moid]]$_align = .;$NL$
320 $TAB$} > $REG.REGNAME[MO.MEMREG[moid]]$$NL$
321 $NL$
322 $END$
323
324 $preid = moid$
325 $END$
326$END$
327
328$FOREACH lsid RANGE(1, numls)$
329 $TAB$$LNKSEC.SECTION[lsid]$ ALIGN(16) : {$NL$
330 $TAB$$TAB$*($LNKSEC.SECTION[lsid]$)$NL$
331 $TAB$} > $REG.REGNAME[LNKSEC.MEMREG[lsid]]$$NL$
332 $NL$
333$END$
334
335$ // C++testで必要な標準ライブラリで使用するセクション
336$TAB$.dummy_rom_for_cpptest : {$NL$
337$TAB$$TAB$*(.ctors.65535) *(.eh_frame)$NL$
338$TAB$} > $REG.REGNAME[STANDARD_ROM]$$NL$
339$TAB$. = ALIGN(64);$NL$$NL$
340$TAB$.dummy_ram_for_cpptest : {$NL$
341$TAB$$TAB$_end = .;$NL$
342$TAB$} > $REG.REGNAME[STANDARD_RAM]$$NL$
343$TAB$. = ALIGN(64);$NL$$NL$
344
345$TAB$.sdabase : {$NL$
346$TAB$} > $REG.REGNAME[STANDARD_RAM]$$NL$
347$TAB$.tdata ALIGN (4) :$NL$
348$TAB${$NL$
349$TAB$ PROVIDE(__ep = .);$NL$
350$TAB$ *(.tbyte)$NL$
351$TAB$ *(.tcommon_byte)$NL$
352$TAB$ *(.tdata)$NL$
353$TAB$ *(.tbss)$NL$
354$TAB$ *(.tcommon)$NL$
355$TAB$} > $REG.REGNAME[STANDARD_RAM]$$NL$
356$NL$$NL$
357
358$TAB$/DISCARD/ : {$NL$
359$TAB$$TAB$*(.rel.dyn)$NL$
360$TAB$}$NL$
361$NL$
362
363$TAB$/* DWARF debug sections.$NL$
364$TAB$Symbols in the DWARF debugging sections are relative to $NL$
365$TAB$the beginning of the section so we begin them at 0. */$NL$
366$NL$
367$TAB$/* DWARF 1 */$NL$
368$TAB$.debug 0 : { *(.debug) }$NL$
369$TAB$.line 0 : { *(.line) }$NL$
370$NL$
371$TAB$/* GNU DWARF 1 extensions */$NL$
372$TAB$.debug_srcinfo 0 : { *(.debug_srcinfo) }$NL$
373$TAB$.debug_sfnames 0 : { *(.debug_sfnames) }$NL$
374$NL$
375}$NL$
Note: See TracBrowser for help on using the repository browser.