source: atk2-sc3_fl850f1l/arch/v850_ghs/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: 20.4 KB
Line 
1$
2$ TOPPERS ATK2
3$ Toyohashi Open Platform for Embedded Real-Time Systems
4$ Automotive Kernel Version 2
5$
6$ Copyright (C) 2012-2014 by Center for Embedded Computing Systems
7$ Graduate School of Information Science, Nagoya Univ., JAPAN
8$ Copyright (C) 2012-2013 by FUJISOFT INCORPORATED, JAPAN
9$ Copyright (C) 2012-2013 by FUJITSU VLSI LIMITED, JAPAN
10$ Copyright (C) 2012-2013 by NEC Communication Systems, Ltd., JAPAN
11$ Copyright (C) 2012-2013 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
12$ Copyright (C) 2012-2013 by Renesas Electronics Corporation, JAPAN
13$ Copyright (C) 2012-2013 by Sunny Giken Inc., JAPAN
14$ Copyright (C) 2012-2013 by TOSHIBA CORPORATION, JAPAN
15$ Copyright (C) 2012-2013 by Witz Corporation, JAPAN
16$ Copyright (C) 2013 by Embedded and Real-Time Systems Laboratory
17$ Graduate School of Information Science, Nagoya Univ., JAPAN
18$
19$ 上記著作権者は,以下の(1)(4)の条件を満たす場合に限り,本ソフトウェ
20$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
21$ 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
22$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
23$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
24$ スコード中に含まれていること.
25$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
26$ 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
27$ 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
28$ の無保証規定を掲載すること.
29$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
30$ 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
31$ と.
32$ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
33$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
34$ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
35$ 報告すること.
36$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
37$ 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
38$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
39$ 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
40$ 免責すること.
41$
42$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
43$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
44$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
45$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
46$ の責任を負わない.
47$
48$ $Id: prc.tf 189 2015-06-26 01:54:57Z t_ishikawa $
49$
50
51$
52$ パス2のアーキテクチャ依存テンプレート(V850用)
53$
54
55$
56$ kernel/kernel.tf のターゲット依存部
57$
58
59$
60$ ユーザスタック領域を確保するコードを出力する
61$ ARGV[1]:タスクID
62$ ARGV[2]:スタックサイズ
63$
64$FUNCTION ALLOC_USTACK$
65 StackType _kernel_ustack_$ARGV[1]$[COUNT_STK_T($ARGV[2]$)]
66 $SPC$__attribute__((section($FORMAT("\".user_stack.%s\"", ARGV[1])$)));$NL$
67
68 $TSK.TINIB_USTKSZ[ARGV[1]] = VALUE(FORMAT("ROUND_STK_T(%s)", ARGV[2]), +ARGV[2])$
69 $TSK.TINIB_USTK[ARGV[1]] = FORMAT("_kernel_ustack_%s", ARGV[1])$
70$END$
71
72$
73$ ユーザスタック領域のセクション名を返す
74$ ARGV[1]:タスクID
75$
76$FUNCTION SECTION_USTACK$
77 $RESULT = FORMAT(".user_stack.%s", ARGV[1])$
78$END$
79
80$
81$ ユーザスタックのアライメント制約に合わせたサイズを返す
82$ ARGV[1]:スタックサイズ(アライン前)
83$ kernel.tfから呼ばれる
84$
85$FUNCTION USTACK_ALIGN_SIZE$
86 $RESULT = (ARGV[1] + CHECK_USTKSZ_ALIGN - 1) & ~(CHECK_USTKSZ_ALIGN - 1)$
87$END$
88
89$
90$ 基本タスクの共有スタックの確保
91$ ARGV[1]:共有スタック名
92$ ARGV[2]:共有スタックID(タスク優先度)
93$ ARGV[3]:スタックサイズ(アライメント調整済み)
94$ kernel.tfから呼ばれる
95$
96$FUNCTION ALLOC_SHARED_USTACK$
97 StackType $ARGV[1]$[COUNT_STK_T(ROUND_STK_T($ARGV[3]$))]
98 $SPC$__attribute__((section($FORMAT("\".shared_user_stack.%s\"", ARGV[2])$)));$NL$
99$END$
100
101$
102$ 基本タスクの共有スタックのセクション名
103$ ARGV[1]:共有スタックID(タスク優先度)
104$ kernel.tfから呼ばれる
105$
106$FUNCTION SECTION_SHARED_USTACK$
107 $RESULT = FORMAT(".shared_user_stack.%s", ARGV[1])$
108$END$
109
110$
111$ 非信頼フックスタックの確保
112$ ARGV[1]:スタック名
113$ ARGV[2]:スタックサイズ
114$ kernel.tfから呼ばれる
115$
116$FUNCTION ALLOC_HSTACK$
117 $name = ARGV[1]$
118 $size = ARGV[2]$
119 StackType $name$[COUNT_STK_T(ROUND_STK_T($HSTACK_SIZE_STR(size)$))] __attribute__((section(".prsv_kernel")));$NL$
120$END$
121
122$
123$ 非信頼フックスタックサイズのアライメント制約を満たすように拡張したサイズの文字列
124$ ARGV[1]:スタックサイズ
125$ kernel.tfから呼ばれる
126$
127$FUNCTION HSTACK_SIZE_STR$
128 TOPPERS_ROUND_SZ($ARGV[1]$, CHECK_USTKSZ_ALIGN)
129$END$
130
131$
132$ OsMemoryArea はサポートしない
133$
134$FUNCTION HOOK_ERRORCHECK_MOD$
135 $IF (MOD.OSAPID[ARGV[1]] != TDOM_KERNEL) &&
136 (MOD.OSAPID[ARGV[1]] != TDOM_NONE) &&
137 !OSAP.TRUSTED[MOD.OSAPID[ARGV[1]]] &&
138 !MOD.EXPORT[ARGV[1]]$
139 $ERROR$
140 OsMemoryModuleExport of OsMemoryModule $MOD.MODULE[ARGV[1]]$ must be true.$NL$
141 $END$
142 $END$
143$END$
144
145$FUNCTION HOOK_ERRORCHECK_SEC$
146 $IF !EQ(SEC.OSAPID[ARGV[1]], "") &&
147 (SEC.OSAPID[ARGV[1]] != TDOM_KERNEL) &&
148 !OSAP.TRUSTED[SEC.OSAPID[ARGV[1]]] &&
149 !SEC.EXPORT[ARGV[1]]$
150 $ERROR$
151 OsMemorySectionExport of OsMemorySection $SEC.SECTION[ARGV[1]]$ must be true.$NL$
152 $END$
153 $END$
154$END$
155
156$FUNCTION HOOK_ERRORCHECK_MEM$
157 $ERROR$
158 OsMemoryArea is not supported.$NL$
159 $END$
160$END$
161
162$
163$ 標準のセクションのメモリオブジェクト属性の定義
164$
165$MEMATR_TEXT = (TA_NOWRITE|TA_EXEC)$
166$MEMATR_RODATA = (TA_NOWRITE|TA_EXEC)$
167$MEMATR_DATA = TA_MEMINI$
168$MEMATR_BSS = TA_NULL$
169$MEMATR_PRSV = TA_MEMPRSV$
170$MEMATR_ROSDATA = (TA_SDATA|TA_MEMINI|TA_NOWRITE|TA_EXEC)$
171$MEMATR_SDATA = (TA_SDATA|TA_MEMINI)$
172$MEMATR_SBSS = TA_SDATA$
173
174$TARGET_MEMATR_USTACK = TA_NULL$
175
176$
177$ 標準のセクションに関する定義
178$ DSEC.ORDER_LIST:IDのリスト
179$ DESC.SECTION:セクション名
180$ DESC.MEMREG:セクションを配置するメモリリージョン
181$ DESC.MEMATR:セクションのメモリオブジェクト属性
182$
183$DSEC.ORDER_LIST = RANGE(0,7)$
184
185$DSEC.SECTION[0] = ".text"$
186$DSEC.MEMREG[0] = 1$
187$DSEC.MEMATR[0] = MEMATR_TEXT$
188
189$DSEC.SECTION[1] = ".rodata"$
190$DSEC.MEMREG[1] = 1$
191$DSEC.MEMATR[1] = MEMATR_RODATA$
192
193$DSEC.SECTION[2] = ".data"$
194$DSEC.MEMREG[2] = 0$
195$DSEC.MEMATR[2] = MEMATR_DATA$
196
197$DSEC.SECTION[3] = ".bss"$
198$DSEC.MEMREG[3] = 0$
199$DSEC.MEMATR[3] = MEMATR_BSS$
200
201$DSEC.SECTION[4] = ".prsv"$
202$DSEC.MEMREG[4] = 0$
203$DSEC.MEMATR[4] = MEMATR_PRSV$
204
205$DSEC.SECTION[5] = ".rosdata"$
206$DSEC.MEMREG[5] = 0$
207$DSEC.MEMATR[5] = MEMATR_ROSDATA$
208
209$DSEC.SECTION[6] = ".sdata"$
210$DSEC.MEMREG[6] = 0$
211$DSEC.MEMATR[6] = MEMATR_SDATA$
212
213$DSEC.SECTION[7] = ".sbss"$
214$DSEC.MEMREG[7] = 0$
215$DSEC.MEMATR[7] = MEMATR_SBSS$
216
217$
218$ OSAP初期化コンテキストブロックのための宣言
219$
220$FUNCTION PREPARE_OSAPINICTXB$
221 $IF LENGTH(TSK.ID_LIST)$
222 $FOREACH tskid TSK.ID_LIST$
223 $IF !OSAP.TRUSTED[TSK.OSAPID[tskid]]$
224 extern uint8 $FORMAT("__start_user_stack%s", tskid)$;$NL$
225 extern uint8 $FORMAT("__limit_user_stack%s", tskid)$;$NL$
226 $END$
227 $END$
228 $END$
229 $FOREACH tskpri RANGE(TMIN_TPRI, TMAX_TPRI)$
230 $IF LENGTH(shared_ustack_size[tskpri])$
231 extern uint8 $FORMAT("__start_shared_user_stack%s", tskpri)$;$NL$
232 extern uint8 $FORMAT("__limit_shared_user_stack%s", tskpri)$;$NL$
233 $END$
234 $END$
235
236
237 $IF LENGTH(OSAP.ID_LIST)$
238 $FOREACH domid OSAP.ID_LIST$
239 $IF !OSAP.TRUSTED[domid]$
240$ RX領域(専用)
241 extern uint8 __start_text_$OSAP.LABEL[domid]$;$NL$
242 extern uint8 __limit_text_$OSAP.LABEL[domid]$;$NL$
243$ R領域(専用)
244 extern uint8 __start_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
245 extern uint8 __limit_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
246$ RWX領域(専用)
247 extern uint8 __start_ram_$OSAP.LABEL[domid]$;$NL$
248 extern uint8 __limit_ram_$OSAP.LABEL[domid]$;$NL$
249 extern uint8 __start_sram_$OSAP.LABEL[domid]$;$NL$
250 extern uint8 __limit_sram_$OSAP.LABEL[domid]$;$NL$
251$ 共有リード専用ライト
252 extern uint8 $FORMAT("__start_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
253 extern uint8 $FORMAT("__limit_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
254 extern uint8 $FORMAT("__start_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
255 extern uint8 $FORMAT("__limit_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
256$ extern uint8 $FORMAT("__start_ram_%s_srpw", OSAP.LABEL[domid])$;$NL$
257$ extern uint8 $FORMAT("__limit_ram_%s_srpw", OSAP.LABEL[domid])$;$NL$
258$ extern uint8 $FORMAT("__start_sram_%s_srpw", OSAP.LABEL[domid])$;$NL$
259$ extern uint8 $FORMAT("__limit_sram_%s_srpw", OSAP.LABEL[domid])$;$NL$
260 $END$
261 $END$
262 $NL$
263 $END$$NL$
264
265$ 共有領域
266 extern uint8 __start_text_$OSAP.LABEL[TDOM_NONE]$;$NL$
267 extern uint8 __limit_text_$OSAP.LABEL[TDOM_NONE]$;$NL$
268 extern uint8 __start_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
269 extern uint8 __limit_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
270 extern uint8 __start_ram_$OSAP.LABEL[TDOM_NONE]$;$NL$
271 extern uint8 __limit_ram_$OSAP.LABEL[TDOM_NONE]$;$NL$
272 extern uint8 __start_sram_$OSAP.LABEL[TDOM_NONE]$;$NL$
273 extern uint8 __limit_sram_$OSAP.LABEL[TDOM_NONE]$;$NL$
274$ 共有リード専用ライト領域全体
275 extern uint8 __start_srpw_all;$NL$
276 extern uint8 __limit_srpw_all;$NL$
277 extern uint8 __start_ssrpw_all;$NL$
278 extern uint8 __limit_ssrpw_all;$NL$
279 $NL$
280$END$
281
282
283$FUNCTION GENERATE_TARGET_MPUINFOB$
284$
285$ 保護ドメイン初期化ブロックの変更部を生成
286$
287 $FILE "Os_Lcfg.h"$
288 extern const uint32 tnum_shared_mem;$NL$
289 extern uint8 * const shared_meminib_table[];$NL$
290 $NL$
291
292 $FILE "kernel_mem2.c"$
293
294 $PREPARE_OSAPINICTXB()$
295
296$END$
297
298$
299$ TSKINICTXBの初期化情報を生成
300$
301$DOMINICTXB_KERNEL = "{ NULL }"$
302
303$FUNCTION GENERATE_OSAPINIB_MPUINFOB$
304
305 $TAB$$TAB${
306 $IF !OSAP.TRUSTED[ARGV[1]]$
307$ 共有リード専用ライト
308 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__start_ram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* MPLA 1 */$NL$
309 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__limit_ram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* MPUA 1 */$NL$
310$ 共有リード専用ライト(ショートデータ)
311 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__start_sram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* MPLA 2 */$NL$
312 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__limit_sram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* MPUA 2 */$NL$
313 $TAB$$TAB$$TAB$( (uint32)0 ),/* MPRC */$NL$
314 $ELSE$
315 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* MPLA 1 */$NL$
316 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* MPUA 1 */$NL$
317 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* MPLA 2 */$NL$
318 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* MPUA 2 */$NL$
319 $TAB$$TAB$$TAB$( (uint32)0 ),/* MPRC */$NL$
320 $END$
321 $TAB$$TAB$}$NL$
322 $NL$
323$END$
324
325$FUNCTION GENERATE_TSKINICTXB$
326 $TAB$$TAB${$NL$
327 $TAB$$TAB$$TAB$$TSK.TINIB_SSTKSZ[ARGV[1]]$,$NL$
328 $TAB$$TAB$$TAB$((void *)((uint8 *)($TSK.TINIB_SSTK[ARGV[1]]$)
329 $SPC$+ ($TSK.TINIB_SSTKSZ[ARGV[1]]$))),$NL$
330 $IF OSAP.TRUSTED[TSK.OSAPID[ARGV[1]]]$
331 $TAB$$TAB$$TAB$0,$NL$
332 $TAB$$TAB$$TAB$0,$NL$
333 $ELSE$
334 $TAB$$TAB$$TAB$$TSK.TINIB_USTKSZ[ARGV[1]]$,$NL$
335 $TAB$$TAB$$TAB$((void *)((uint8 *)($TSK.TINIB_USTK[ARGV[1]]$)
336 $SPC$+ ($TSK.TINIB_USTKSZ[ARGV[1]]$))),$NL$
337 $END$
338 $TAB$$TAB$},$NL$
339$END$
340
341$FUNCTION GENERATE_STKMPUINFOB$
342 $TAB$$TAB${$NL$
343 $IF OSAP.TRUSTED[TSK.OSAPID[ARGV[1]]]$
344 $TAB$$TAB$$TAB$0,$NL$
345 $TAB$$TAB$$TAB$0,$NL$
346 $ELSE$
347 $IF EQ(TSK.STK[ARGV[1]],"NULL")$
348$ // stkがNULLの場合の処理
349 $IF LENGTH(TSK.SHARED_USTK_ID[ARGV[1]])$
350$ // 共有スタック
351 $TAB$$TAB$$TAB$$FORMAT("&__start_shared_user_stack%s", TSK.PRIORITY[ARGV[1]])$,$NL$
352 $TAB$$TAB$$TAB$$FORMAT("&__limit_shared_user_stack%s", TSK.PRIORITY[ARGV[1]])$,$NL$
353 $ELSE$
354$ // 固有スタック
355 $TAB$$TAB$$TAB$$FORMAT("&__start_user_stack%s", ARGV[1])$,$NL$
356 $TAB$$TAB$$TAB$$FORMAT("&__limit_user_stack%s", ARGV[1])$,$NL$
357 $END$
358 $ELSE$
359$ // stkがNULLでない場合の処理
360 $TAB$$TAB$$TAB$$FORMAT("(uint8 *)%s", TSK.TINIB_USTK[ARGV[1]])$,$NL$
361 $TAB$$TAB$$TAB$$FORMAT("(uint8 *)((uint32)%s + %d)", TSK.TINIB_USTK[ARGV[1]], TSK.TINIB_USTKSZ[ARGV[1]])$,$NL$
362 $END$
363 $END$
364 $TAB$$TAB$},$NL$
365$END$
366
367$INCLUDE "arch/v850_gcc/prc_common.tf"$
368
369$IF __v850e2v3__$
370
371$
372$ 割込みベクタと各割込み入口処理
373$
374
375$FILE "Os_Lcfg.c"$
376
377$
378$ ベクタテーブル(例外要因全てを作成))
379$
380$E_OS_PROTECTION_MEMORY = 14$
381$E_OS_PROTECTION_EXCEPTION = 22$
382
383extern void _reset(void) __attribute__((section (".vector")));$NL$
384void$NL$
385_reset(void)$NL$
386{$NL$
387$
388$ ベクタテーブル(リセット)
389$
390 $TAB$Asm(".extern ___start");$NL$
391 $TAB$Asm("jr __start");
392 $FORMAT(" /* Exception 0x%x */", 0)$$NL$
393 $TAB$Asm("nop");$NL$
394 $TAB$Asm("nop");$NL$
395 $TAB$Asm("nop");$NL$
396 $TAB$Asm("nop");$NL$
397 $TAB$Asm("nop");$NL$
398 $TAB$Asm("nop");$NL$
399$
400$ ベクタテーブル(例外 No1-7)
401$
402$ 例外 No1
403 $TAB$Asm("ldsr r2, eiwr /* 0x00: eiwr */");$NL$
404 $TAB$Asm("movea $E_OS_PROTECTION_EXCEPTION$, r0, r2");$NL$
405 $TAB$Asm("jr _fe_exception_entry");
406 $FORMAT(" /* Exception 0x%x */", 1)$$NL$
407 $TAB$Asm("nop");$NL$
408 $TAB$Asm("nop");$NL$
409$ 例外 No2
410 $TAB$Asm("ldsr r2, eiwr /* 0x00: eiwr */");$NL$
411 $TAB$Asm("movea $E_OS_PROTECTION_EXCEPTION$, r0, r2");$NL$
412 $TAB$Asm("jr _fe_exception_entry");
413 $FORMAT(" /* Exception 0x%x */", 2)$$NL$
414 $TAB$Asm("nop");$NL$
415 $TAB$Asm("nop");$NL$
416$ 例外 No3
417 $TAB$Asm("ldsr r2, eiwr /* 0x00: eiwr */");$NL$
418 $TAB$Asm("movea $E_OS_PROTECTION_MEMORY$, r0, r2");$NL$
419 $TAB$Asm("jr _fe_exception_entry");
420 $FORMAT(" /* Exception 0x%x */", 3)$$NL$
421 $TAB$Asm("nop");$NL$
422 $TAB$Asm("nop");$NL$
423$ 例外 No4
424 $TAB$Asm("ldsr r2, eiwr /* 0x00: eiwr */");$NL$
425 $TAB$Asm("movea $E_OS_PROTECTION_EXCEPTION$, r0, r2");$NL$
426 $TAB$Asm("jr _ei_exception_entry");
427 $FORMAT(" /* Exception 0x%x */", 4)$$NL$
428 $TAB$Asm("nop");$NL$
429 $TAB$Asm("nop");$NL$
430$ 例外 No5
431 $TAB$Asm("ldsr r2, eiwr /* 0x00: eiwr */");$NL$
432 $TAB$Asm("movea $E_OS_PROTECTION_EXCEPTION$, r0, r2");$NL$
433 $TAB$Asm("jr _fe_exception_entry");
434 $FORMAT(" /* Exception 0x%x */", 5)$$NL$
435 $TAB$Asm("nop");$NL$
436 $TAB$Asm("nop");$NL$
437$ 例外 No6
438 $TAB$Asm("nop");
439 $FORMAT(" /* Exception 0x%x */", 6)$$NL$
440 $TAB$Asm("nop");$NL$
441 $TAB$Asm("nop");$NL$
442 $TAB$Asm("nop");$NL$
443 $TAB$Asm("nop");$NL$
444 $TAB$Asm("nop");$NL$
445 $TAB$Asm("nop");$NL$
446 $TAB$Asm("nop");$NL$
447$ 例外 No7
448 $TAB$Asm("ldsr r2, eiwr /* 0x00: eiwr */");$NL$
449 $TAB$Asm("movea $E_OS_PROTECTION_EXCEPTION$, r0, r2");$NL$
450 $TAB$Asm("jr _fe_exception_entry");
451 $FORMAT(" /* Exception 0x%x */", 7)$$NL$
452 $TAB$Asm("nop");$NL$
453 $TAB$Asm("nop");$NL$
454
455
456
457$
458$ ベクタテーブル(EIレベル マスカブル割込み用(8-255)
459$
460$FOREACH intno INTNO_VALID$
461$TAB$/* $FORMAT("0x%x",intno*16 + 0x80)$ */ $NL$
462 $isrid = INT.ISRID[intno]$
463 $IF LENGTH(isrid)$
464 $IF EQ(ISR.CATEGORY[isrid], "CATEGORY_2")$
465 $TAB$Asm("ldsr r2, eiwr /* 0x00: eiwr */");$NL$
466 $TAB$Asm("movea $intno$, r0, r2 /* 0x06: r2 = intno */");$NL$
467 $TAB$Asm("jr _interrupt /* 0x0A */");$NL$
468 $TAB$Asm("nop /* 0x0E */");$NL$
469 $TAB$Asm("nop /* 0x0E */");$NL$
470 $ELSE$
471 $TAB$Asm("jr _$ISR.INT_ENTRY[isrid]$");$NL$
472 $TAB$Asm("nop");$NL$
473 $TAB$Asm("nop");$NL$
474 $TAB$Asm("nop");$NL$
475 $TAB$Asm("nop");$NL$
476 $TAB$Asm("nop");$NL$
477 $TAB$Asm("nop");$NL$
478 $END$
479 $ELSE$
480$ // 割込みハンドラの登録がない場合
481 $TAB$Asm("jr _default_int_handler");$NL$
482 $TAB$Asm("nop");$NL$
483 $TAB$Asm("nop");$NL$
484 $TAB$Asm("nop");$NL$
485 $TAB$Asm("nop");$NL$
486 $TAB$Asm("nop");$NL$
487 $TAB$Asm("nop");$NL$
488 $END$
489$END$
490}$NL$
491$END$
492$ =end IF __v850e2v3__
493
494$IF __v850e3v5__$
495
496$
497$ テーブル参照方式用ベクタテーブル(v850e3v5)
498$
499
500extern void interrupt(void);$NL$
501const uint32 __attribute__((aligned(512))) intbp_tbl[TNUM_INT] = {$NL$
502$JOINEACH intno INTNO_VALID "\n"$
503 $isrid = INT.ISRID[intno]$
504 $IF LENGTH(isrid) && EQ(ISR.CATEGORY[isrid], "CATEGORY_1")$
505 $TAB$(uint32)&$ISR.INT_ENTRY[isrid]$
506 $ELSE$
507 $TAB$(uint32)&interrupt
508 $END$
509$ //カンマの出力(最後の要素の後ろに出力しない)
510 $IF intno != AT(INTNO_VALID,LENGTH(INTNO_VALID) - 1)$
511 ,
512 $END$
513 $TAB$$FORMAT("/* %d */", intno)$
514$END$
515$NL$};$NL$
516
517$END$
518
519$
520$ arch/gcc/ldscript.tfのターゲット依存部
521$
522
523$FUNCTION GENERATE_MEMORY$
524 $NOOP()$
525$END$
526
527$FUNCTION GENERATE_OUTPUT$
528 $NL$
529$END$
530
531$FUNCTION GENERATE_PROVIDE$
532 provide(_hardware_init_hook = 0);$NL$
533 provide(_software_init_hook = 0);$NL$
534 provide(_software_term_hook = 0);$NL$
535 provide(_bsssecinib_table = 0);$NL$
536 provide(_tnum_bsssec = 0);$NL$
537 provide(_datasecinib_table = 0);$NL$
538 provide(_tnum_datasec = 0);$NL$
539 $NL$
540
541 $IF LENGTH(OSAP.ID_LIST)$
542 $FOREACH domid OSAP.ID_LIST$
543 $IF !OSAP.TRUSTED[domid]$
544$ RX領域(専用)
545 provide(___start_text_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
546 provide(___limit_text_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
547$ R領域(専用)
548 provide(___start_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
549 provide(___limit_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
550$ RWX領域(専用)
551 provide(___start_ram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
552 provide(___limit_ram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
553 provide(___start_sram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
554 provide(___limit_sram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
555$ 共有リード専用ライト
556 provide($FORMAT("___start_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
557 provide($FORMAT("___limit_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
558 provide($FORMAT("___start_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
559 provide($FORMAT("___limit_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
560$ provide($FORMAT("___start_ram_%s_srpw", OSAP.LABEL[domid])$ = 0xfffffff0);$NL$
561$ provide($FORMAT("___limit_ram_%s_srpw", OSAP.LABEL[domid])$ = 0xfffffff0);$NL$
562$ provide($FORMAT("___start_sram_%s_srpw", OSAP.LABEL[domid])$ = 0xfffffff0);$NL$
563$ provide($FORMAT("___limit_sram_%s_srpw", OSAP.LABEL[domid])$ = 0xfffffff0);$NL$
564 $END$
565 $END$
566 $NL$
567 $END$$NL$
568
569$ 共有領域
570 provide(___start_text_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
571 provide(___limit_text_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
572 provide(___start_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
573 provide(___limit_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
574 provide(___start_ram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
575 provide(___limit_ram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
576 provide(___start_sram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
577 provide(___limit_sram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
578$ 共有リード専用ライト領域全体
579 provide(___start_srpw_all = 0xfffffff0);$NL$
580 provide(___limit_srpw_all = 0xfffffff0);$NL$
581 provide(___start_ssrpw_all = 0xfffffff0);$NL$
582 provide(___limit_ssrpw_all = 0xfffffff0);$NL$
583 $NL$
584$END$
585
586$ $FUNCTION TARGET_PROVIDE_GP$
587$FUNCTION GENERATE_GP_LABEL$
588 $TAB$$TAB$__gp = . + 32K;$NL$
589$END$
590
591$FILE "kernel_mem2.c"$
592
593$TNUM_SHARED_REGION = 1$
594const uint32 tnum_shared_mem = $TNUM_SHARED_REGION * 2$;$NL$
595uint8 * const shared_meminib_table[$TNUM_SHARED_REGION * 2$] = {$NL$
596$TAB$((uint8 *)NULL),$TAB$/* MPLA 3 */$NL$
597$TAB$((uint8 *)NULL),$TAB$/* MPUA 3 */$NL$
598};$NL$
599$NL$
600$ const uint32 mpu_region_control = 0x01; /* MPRC */$NL$
601$ $NL$
602
603$
604$ GCC依存部のテンプレートファイルのインクルード
605$
606$INCLUDE "ghs/ldscript.tf"$
607
608$FILE "cfg2_out.tf"$
609$ LNKSEC.*の出力
610$$numls = $numls$$$$NL$
611$NL$
612$FOREACH lsid RANGE(1, numls)$
613 $$LNKSEC.MEMREG[$lsid$] = $LNKSEC.MEMREG[lsid]$$$$NL$
614 $$LNKSEC.SECTION[$lsid$] = $ESCSTR(LNKSEC.SECTION[lsid])$$$$NL$
615 $NL$
616$END$
617
618$JOINEACH tskid TSK.ID_LIST "\n"$
619 $$TSK.ID[$+tskid$] = $TSK.ID[tskid]$$$
620$END$
621$NL$
622
Note: See TracBrowser for help on using the repository browser.