source: atk2-sc3_fl850f1l/arch/v850_ccrh/prc.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: 10.5 KB
Line 
1$
2$ TOPPERS ATK2
3$ Toyohashi Open Platform for Embedded Real-Time Systems
4$ Automotive Kernel Version 2
5$
6$ Copyright (C) 2013-2015 by Center for Embedded Computing Systems
7$ Graduate School of Information Science, Nagoya Univ., JAPAN
8$ Copyright (C) 2013-2014 by FUJI SOFT INCORPORATED, JAPAN
9$ Copyright (C) 2013-2014 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
10$ Copyright (C) 2013-2014 by Renesas Electronics Corporation, JAPAN
11$ Copyright (C) 2013-2014 by Sunny Giken Inc., JAPAN
12$ Copyright (C) 2013-2014 by TOSHIBA CORPORATION, JAPAN
13$ Copyright (C) 2013-2014 by Witz Corporation, JAPAN
14$
15$ 上記著作権者は,以下の(1)(4)の条件を満たす場合に限り,本ソフトウェ
16$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
17$ 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
18$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
19$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
20$ スコード中に含まれていること.
21$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
22$ 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
23$ 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
24$ の無保証規定を掲載すること.
25$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
26$ 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
27$ と.
28$ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
29$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
30$ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
31$ 報告すること.
32$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
33$ 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
34$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
35$ 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
36$ 免責すること.
37$
38$ 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
39$ 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
40$ はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
41$ 用する者に対して,AUTOSARパートナーになることを求めている.
42$
43$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
44$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
45$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
46$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
47$ の責任を負わない.
48$
49$ $Id: prc.tf 189 2015-06-26 01:54:57Z t_ishikawa $
50$
51
52$
53$ パス2のアーキテクチャ依存テンプレート(V850用)
54$
55
56$FILE "kernel_mem2.c"$
57#pragma section kernel
58
59$FILE "Os_Lcfg.c"$
60#pragma section kernel
61
62$
63$ kernel/kernel.tf のターゲット依存部
64$
65
66$
67$ ユーザスタック領域を確保するコードを出力する
68$ ARGV[1]:タスクID
69$ ARGV[2]:スタックサイズ
70$
71$FUNCTION ALLOC_USTACK$
72 #pragma section $FORMAT(".user_stack.%s", ARGV[1])$$NL$
73 StackType _kernel_ustack_$ARGV[1]$[COUNT_STK_T($ARGV[2]$)];$NL$
74 #pragma section kernel$NL$
75
76 $TSK.TINIB_USTKSZ[ARGV[1]] = VALUE(FORMAT("ROUND_STK_T(%s)", ARGV[2]), +ARGV[2])$
77 $TSK.TINIB_USTK[ARGV[1]] = FORMAT("_kernel_ustack_%s", ARGV[1])$
78$END$
79
80$
81$ ユーザスタック領域のセクション名を返す
82$ ARGV[1]:タスクID
83$
84$FUNCTION SECTION_USTACK$
85 $RESULT = FORMAT(".user_stack.%s.bss", ARGV[1])$
86$END$
87
88$
89$ ユーザスタックのアライメント制約に合わせたサイズを返す
90$ ARGV[1]:スタックサイズ(アライン前)
91$ kernel.tfから呼ばれる
92$
93$FUNCTION USTACK_ALIGN_SIZE$
94 $RESULT = (ARGV[1] + CHECK_USTKSZ_ALIGN - 1) & ~(CHECK_USTKSZ_ALIGN - 1)$
95$END$
96
97$
98$ 基本タスクの共有スタックの確保
99$ ARGV[1]:共有スタック名
100$ ARGV[2]:共有スタックID(タスク優先度)
101$ ARGV[3]:スタックサイズ(アライメント調整済み)
102$ kernel.tfから呼ばれる
103$
104$FUNCTION ALLOC_SHARED_USTACK$
105 #pragma section $FORMAT(".shared_user_stack.%s", ARGV[2])$$NL$
106 StackType $ARGV[1]$[COUNT_STK_T(ROUND_STK_T($ARGV[3]$))];$NL$
107 #pragma section kernel$NL$
108$END$
109
110$
111$ 基本タスクの共有スタックのセクション名
112$ ARGV[1]:共有スタックID(タスク優先度)
113$ kernel.tfから呼ばれる
114$
115$FUNCTION SECTION_SHARED_USTACK$
116 $RESULT = FORMAT(".shared_user_stack.%s.bss", ARGV[1])$
117$END$
118
119$
120$ 非信頼フックスタックの確保
121$ ARGV[1]:スタック名
122$ ARGV[2]:スタックサイズ
123$ kernel.tfから呼ばれる
124$
125$FUNCTION ALLOC_HSTACK$
126 $name = ARGV[1]$
127 $size = ARGV[2]$
128 #pragma section $FORMAT("kernel.srpw")$$NL$
129 StackType $name$[COUNT_STK_T(ROUND_STK_T($HSTACK_SIZE_STR(size)$))];$NL$
130 #pragma section kernel$NL$
131$END$
132
133$
134$ 非信頼フックスタックサイズのアライメント制約を満たすように拡張したサイズの文字列
135$ ARGV[1]:スタックサイズ
136$ kernel.tfから呼ばれる
137$
138$FUNCTION HSTACK_SIZE_STR$
139 TOPPERS_ROUND_SZ($ARGV[1]$, CHECK_USTKSZ_ALIGN)
140$END$
141
142$
143$ OsMemoryModule はサポートしない
144$
145$TOPPERS_SUPPORT_ATT_MOD = 0$
146$FUNCTION HOOK_ERRORCHECK_MOD$
147 $ERROR$
148 OsMemoryModule is not supported.$NL$
149 $END$
150$END$
151
152$
153$ 共有リード専有ライトのみサポート
154$
155$FUNCTION HOOK_ERRORCHECK_SEC$
156 $IF !EQ(SEC.OSAPID[ARGV[1]], "") &&
157 (SEC.OSAPID[ARGV[1]] != TDOM_KERNEL) &&
158 !OSAP.TRUSTED[SEC.OSAPID[ARGV[1]]] &&
159 !SEC.EXPORT[ARGV[1]]$
160 $ERROR$
161 OsMemorySectionExport of OsMemorySection $SEC.SECTION[ARGV[1]]$ must be true.$NL$
162 $END$
163 $END$
164$END$
165
166$
167$ OsMemoryArea はサポートしない
168$
169$FUNCTION HOOK_ERRORCHECK_MEM$
170 $ERROR$
171 OsMemoryArea is not supported.$NL$
172 $END$
173$END$
174
175$
176$ 標準のセクションのメモリオブジェクト属性の定義
177$
178$MEMATR_TEXT = (TA_NOWRITE|TA_EXEC)$
179$MEMATR_RODATA = (TA_NOWRITE|TA_EXEC)$
180$MEMATR_DATA = TA_MEMINI$
181$MEMATR_BSS = TA_NULL$
182$MEMATR_PRSV = TA_MEMPRSV$
183$MEMATR_ROSDATA = (TA_SDATA|TA_MEMINI|TA_NOWRITE|TA_EXEC)$
184$MEMATR_SDATA = (TA_SDATA|TA_MEMINI)$
185$MEMATR_SBSS = TA_SDATA$
186
187$TARGET_MEMATR_USTACK = TA_NULL$
188
189$FUNCTION GENERATE_TARGET_MPUINFOB$
190$
191$ 保護ドメイン初期化ブロックの変更部を生成
192$
193 $FILE "Os_Lcfg.h"$
194 extern const uint32 tnum_shared_mem;$NL$
195 extern uint8 * const shared_meminib_table[];$NL$
196 $NL$
197
198 $FILE "kernel_mem2.c"$
199
200$END$
201
202$
203$ TSKINICTXBの初期化情報を生成
204$
205$DOMINICTXB_KERNEL = "{ NULL }"$
206
207$FUNCTION GENERATE_OSAPINIB_MPUINFOB$
208 $TAB$$TAB${
209 $IF !OSAP.TRUSTED[ARGV[1]]$
210$ 共有リード専用ライト
211 $TAB$$TAB$$TAB$/*dummy at pass2*/$NL$
212 $TAB$$TAB$$TAB$( (uint8 *)0 ),/* MPLA 1 */$NL$
213 $TAB$$TAB$$TAB$( (uint8 *)0 ),/* MPUA 1 */$NL$
214$ 共有リード専用ライト(ショートデータ)
215 $TAB$$TAB$$TAB$( (uint8 *)0 ),/* MPLA 2 */$NL$
216 $TAB$$TAB$$TAB$( (uint8 *)0 ),/* MPUA 2 */$NL$
217 $TAB$$TAB$$TAB$( (uint32)0 ),/* MPRC */$NL$
218 $ELSE$
219 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* MPLA 1 */$NL$
220 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* MPUA 1 */$NL$
221 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* MPLA 2 */$NL$
222 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* MPUA 2 */$NL$
223 $TAB$$TAB$$TAB$( (uint32)0 ),/* MPRC */$NL$
224 $END$
225 $TAB$$TAB$}$NL$
226 $NL$
227$END$
228
229$FUNCTION GENERATE_TSKINICTXB$
230 $TAB$$TAB${$NL$
231 $TAB$$TAB$$TAB$$TSK.TINIB_SSTKSZ[ARGV[1]]$,$NL$
232 $TAB$$TAB$$TAB$((void *)((uint8 *)($TSK.TINIB_SSTK[ARGV[1]]$)
233 $SPC$+ ($TSK.TINIB_SSTKSZ[ARGV[1]]$))),$NL$
234 $IF OSAP.TRUSTED[TSK.OSAPID[ARGV[1]]]$
235 $TAB$$TAB$$TAB$0,$NL$
236 $TAB$$TAB$$TAB$0,$NL$
237 $ELSE$
238 $TAB$$TAB$$TAB$$TSK.TINIB_USTKSZ[ARGV[1]]$,$NL$
239 $TAB$$TAB$$TAB$((void *)((uint8 *)($TSK.TINIB_USTK[ARGV[1]]$)
240 $SPC$+ ($TSK.TINIB_USTKSZ[ARGV[1]]$))),$NL$
241 $END$
242 $TAB$$TAB$},$NL$
243$END$
244
245$FUNCTION GENERATE_STKMPUINFOB$
246 $TAB$$TAB${$NL$
247 $IF OSAP.TRUSTED[TSK.OSAPID[ARGV[1]]]$
248 $TAB$$TAB$$TAB$0,$NL$
249 $TAB$$TAB$$TAB$0,$NL$
250 $ELSE$
251 $IF EQ(TSK.STK[ARGV[1]],"NULL")$
252$ // stkがNULLの場合の処理
253 $IF LENGTH(TSK.SHARED_USTK_ID[ARGV[1]])$
254$ // 共有スタック
255 $TAB$$TAB$$TAB$/*dummy at pass2*/$NL$
256 $TAB$$TAB$$TAB$0,$NL$
257 $TAB$$TAB$$TAB$0,$NL$
258 $ELSE$
259$ // 固有スタック
260 $TAB$$TAB$$TAB$/*dummy at pass2*/$NL$
261 $TAB$$TAB$$TAB$0,$NL$
262 $TAB$$TAB$$TAB$0,$NL$
263 $END$
264 $ELSE$
265$ // stkがNULLでない場合の処理
266 $TAB$$TAB$$TAB$$FORMAT("(uint8 *)%s", TSK.TINIB_USTK[ARGV[1]])$,$NL$
267 $TAB$$TAB$$TAB$$FORMAT("(uint8 *)((uint32)%s + %d)", TSK.TINIB_USTK[ARGV[1]], TSK.TINIB_USTKSZ[ARGV[1]])$,$NL$
268 $END$
269 $END$
270 $TAB$$TAB$},$NL$
271$END$
272
273
274$INCLUDE "arch/v850_gcc/prc_common.tf"$
275
276$IF __v850e3v5__$
277
278$ VECTOR_INTBP()$
279$ ELSE$
280
281$
282$ テーブル参照方式用ベクタテーブル(v850e3v5)
283$
284
285$FILE "Os_Lcfg_asm.asm"$
286
287.extern _interrupt$NL$
288
289$NL$$FOREACH intno INTNO_VALID$
290 $isrid = INT.ISRID[intno]$
291 $IF LENGTH(isrid)$
292 $IF EQ(ISR.CATEGORY[isrid], "CATEGORY_1")$
293 .extern _$ISR.INT_ENTRY[isrid]$$NL$
294 $END$
295 $END$
296$END$
297$NL$
298 .section "EIINTTBL", const$NL$
299 .extern _intbp_tbl$NL$
300 .align 512$NL$
301 _intbp_tbl:$NL$
302$JOINEACH intno INTNO_VALID "\n"$
303 $isrid = INT.ISRID[intno]$
304 $IF LENGTH(isrid) && EQ(ISR.CATEGORY[isrid], "CATEGORY_1")$
305 $TAB$.dw #_$ISR.INT_ENTRY[isrid]$
306 $ELSE$
307 $TAB$.dw #_interrupt
308 $END$
309 $TAB$$FORMAT(";/* %d */", intno)$
310$END$
311
312$NL$
313;/* in order to restrain warning */$NL$
314$NL$
315$FOREACH mo MO_ORDER$
316 $IF MO.LINKER[mo]$
317 $seg = ""$
318 $e = REGEX_REPLACE(MO.SECTION[mo], ".*\\.text$", "")$
319 $IF !EQ(e, MO.SECTION[mo])$
320 $seg = "text"$
321 $END$
322 $e = REGEX_REPLACE(MO.SECTION[mo], ".*\\.const$", "")$
323 $IF !EQ(e, MO.SECTION[mo])$
324 $seg = "const"$
325 $END$
326 $e = REGEX_REPLACE(MO.SECTION[mo], ".*\\.data$", "")$
327 $IF !EQ(e, MO.SECTION[mo])$
328 $seg = "data"$
329 $END$
330 $e = REGEX_REPLACE(MO.SECTION[mo], ".*\\.bss$", "")$
331 $IF !EQ(e, MO.SECTION[mo])$
332 $seg = "bss"$
333 $END$
334 $IF !EQ(seg, "")$
335 $TAB$.section "$MO.SECTION[mo]$", $seg$$NL$
336 _dummy$MO.SECTION[mo]$:$NL$
337 $NL$
338 $END$
339 $END$
340$END$
341
342$END$
343$ //$IF __v850e3v5__$
344
345$
346$ arch/ccrh/ldscript.tfのターゲット依存部
347$
348
349$
350$ CCRH依存部のテンプレートファイルのインクルード
351$
352$INCLUDE "ccrh/ldscript.tf"$
353
354$FILE "kernel_mem2.c"$
355
356$TNUM_SHARED_REGION = 1$
357const uint32 tnum_shared_mem = $TNUM_SHARED_REGION * 2$;$NL$
358uint8 * const shared_meminib_table[$TNUM_SHARED_REGION * 2$] = {$NL$
359$TAB$/*dummy at pass2*/$NL$
360$TAB$((uint8 *)NULL),$TAB$/* MPLA 3 */$NL$
361$TAB$((uint8 *)NULL),$TAB$/* MPUA 3 */$NL$
362};$NL$
363$NL$
364
365$FILE "cfg2_out.tf"$
366$ LNKSEC.*の出力
367$$numls = $numls$$$$NL$
368$NL$
369$FOREACH lsid RANGE(1, numls)$
370 $$LNKSEC.MEMREG[$lsid$] = $LNKSEC.MEMREG[lsid]$$$$NL$
371 $$LNKSEC.SECTION[$lsid$] = $ESCSTR(LNKSEC.SECTION[lsid])$$$$NL$
372 $NL$
373$END$
374
375$JOINEACH tskid TSK.ID_LIST "\n"$
376 $$TSK.ID[$+tskid$] = $TSK.ID[tskid]$$$
377$END$
378$NL$
379
Note: See TracBrowser for help on using the repository browser.