source: atk2-sc3-1.4.0-ntisr/arch/v850_gcc/prc.tf

Last change on this file was 172, checked in by ertl-ishikawa, 8 years ago

ATK2-SC3 1.4.0 RH850依存部 非信頼C2ISR対応を追加

  • Property svn:executable set to *
File size: 11.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) 2012-2013 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$ 上記著作権者
20は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
21$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
22$ 変・再é…
23å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
24$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
25$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
26$ スコード中に含まれていること.
27$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
28$ 用できる形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
31$ 者
32マニュアルなど)に,上記の著作権表示,この利用条件および下記
33$ の無保証規定を掲載すること.
34$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
35$ 用できない形で再é…
36å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
37$ と.
38$ (a) 再é…
39å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
40マニュアルなど)に,上記の著
41$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
42$ (b) 再é…
43å¸ƒã®å½¢æ…
44‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
45$ 報告すること.
46$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
47$ 害からも,上記著作権者
48およびTOPPERSプロジェクトをå…
49è²¬ã™ã‚‹ã“と.
50$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
51$ 由に基づく請求からも,上記著作権者
52およびTOPPERSプロジェクトを
53$ å…
54è²¬ã™ã‚‹ã“と.
55$
56$ 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
57$ 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
58$ はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
59$ 用する者
60に対して,AUTOSARパートナーになることを求めている.
61$
62$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者
63お
64$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
65$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
66$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
67$ の責任を負わない.
68$
69$ $Id: prc.tf 189 2015-06-26 01:54:57Z t_ishikawa $
70$
71
72$
73$ パス2のアーキテクチャ依存テンプレート(V850用)
74$
75
76$
77$ kernel/kernel.tf のターゲット依存部
78$
79
80$
81$ ユーザスタック領域を確保するコードを出力する
82$ ARGV[1]:タスクID
83$ ARGV[2]:スタックサイズ
84$
85$FUNCTION ALLOC_USTACK$
86 StackType _kernel_ustack_$ARGV[1]$[COUNT_STK_T($ARGV[2]$)]
87 $SPC$__attribute__((section($FORMAT("\".user_stack.%s\"", ARGV[1])$)));$NL$
88
89 $TSK.TINIB_USTKSZ[ARGV[1]] = VALUE(FORMAT("ROUND_STK_T(%s)", ARGV[2]), +ARGV[2])$
90 $TSK.TINIB_USTK[ARGV[1]] = FORMAT("_kernel_ustack_%s", ARGV[1])$
91$END$
92
93$
94$ ユーザスタック領域のセクション名を返す
95$ ARGV[1]:タスクID
96$
97$FUNCTION SECTION_USTACK$
98 $RESULT = FORMAT(".user_stack.%s", ARGV[1])$
99$END$
100
101$
102$ ユーザスタックのアライメント制約に合わせたサイズを返す
103$ ARGV[1]:スタックサイズ(アライン前)
104$ kernel.tfから呼ばれる
105$
106$FUNCTION USTACK_ALIGN_SIZE$
107 $RESULT = (ARGV[1] + CHECK_USTKSZ_ALIGN - 1) & ~(CHECK_USTKSZ_ALIGN - 1)$
108$END$
109
110$
111$ 基本タスクのå…
112±æœ‰ã‚¹ã‚¿ãƒƒã‚¯ã®ç¢ºä¿
113$ ARGV[1]:å…
114±æœ‰ã‚¹ã‚¿ãƒƒã‚¯å
115$ ARGV[2]:å…
116±æœ‰ã‚¹ã‚¿ãƒƒã‚¯ID(タスク優å…
117ˆåº¦)
118$ ARGV[3]:スタックサイズ(アライメント調整済み)
119$ kernel.tfから呼ばれる
120$
121$FUNCTION ALLOC_SHARED_USTACK$
122 StackType $ARGV[1]$[COUNT_STK_T(ROUND_STK_T($ARGV[3]$))]
123 $SPC$__attribute__((section($FORMAT("\".shared_user_stack.%s\"", ARGV[2])$)));$NL$
124$END$
125
126$
127$ 基本タスクのå…
128±æœ‰ã‚¹ã‚¿ãƒƒã‚¯ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³å
129$ ARGV[1]:å…
130±æœ‰ã‚¹ã‚¿ãƒƒã‚¯ID(タスク優å…
131ˆåº¦)
132$ kernel.tfから呼ばれる
133$
134$FUNCTION SECTION_SHARED_USTACK$
135 $RESULT = FORMAT(".shared_user_stack.%s", ARGV[1])$
136$END$
137
138$
139$ OSAP初期化コンテキストブロックのための宣言
140$
141$FUNCTION PREPARE_OSAPINICTXB$
142$ データセクション初期化テーブルをROMにé…
143ç½®ã™ã‚‹
144$ rosdata領域はRAMにé…
145ç½®ã•ã‚Œã‚‹ãŸã‚ï¼Œãƒ‡ãƒ¼ã‚¿ã‚»ã‚¯ã‚·ãƒ§ãƒ³åˆæœŸåŒ–テーブルをsdata化すると
146$ データセクションの初期化に失敗する
147 extern const uint32 __attribute__((section(".rodata_kernel"), aligned(4))) tnum_datasec;$NL$
148 extern const DATASECINIB __attribute__((section(".rodata_kernel"), aligned(4))) datasecinib_table[];$NL$
149 extern const uint32 __attribute__((section(".rodata_kernel"), aligned(4))) tnum_bsssec;$NL$
150 extern const BSSSECINIB __attribute__((section(".rodata_kernel"), aligned(4))) bsssecinib_table[];$NL$
151$END$
152
153$FUNCTION ASM_MACRO$
154 .macro $ARGV[1]$ $ARGV[2]$
155$END$
156
157$INCLUDE "arch/v850_gcc/prc_common.tf"$
158
159$IF __v850e2v3__$
160
161$ 割込みベクタと各割込みå…
162¥å£å‡¦ç†(V850E2V3のみ)
163
164$FILE "Os_Lcfg_asm.S"$
165
166
167$
168$ アセンブラ出力用の関数群
169$
170
171$FUNCTION EXCEPTION_VECTOR_SECTION$
172$TAB$.section .vector,"ax"$NL$
173$END$
174
175$FUNCTION ASM_GLOBAL$
176 $TAB$.global $ARGV[1]$
177$END$
178
179$FUNCTION ASM_LABEL$
180 FLABEL($ARGV[1]$)
181$END$
182
183$FUNCTION ASM_COMMENT$
184 //
185$END$
186
187
188#include <v850asm.inc>$NL$$NL$
189
190$VECTOR_ASMOUT()$
191
192$END$
193$ =end IF __v850e2v3__
194
195
196$IF __v850e3v5__$
197
198$
199$ テーブル参ç…
200§æ–¹å¼ç”¨ãƒ™ã‚¯ã‚¿ãƒ†ãƒ¼ãƒ–ル(v850e3v5)
201$
202
203extern void interrupt(void);$NL$
204const uint32 __attribute__((aligned(512))) intbp_tbl[TNUM_INT] = {$NL$
205$JOINEACH intno INTNO_VALID "\n"$
206 $isrid = INT.ISRID[intno]$
207 $IF LENGTH(isrid) && EQ(ISR.CATEGORY[isrid], "CATEGORY_1")$
208 $TAB$(uint32)&$ISR.INT_ENTRY[isrid]$
209 $ELSE$
210 $TAB$(uint32)&interrupt
211 $END$
212$ //カンマの出力(最後の要素の後ろに出力しない)
213 $IF intno != AT(INTNO_VALID,LENGTH(INTNO_VALID) - 1)$
214 ,
215 $END$
216 $TAB$$FORMAT("/* %d */", intno)$
217$END$
218$NL$};$NL$
219
220$END$
221
222$
223$ arch/gcc/ldscript.tfのターゲット依存部
224$
225
226$FUNCTION GENERATE_MEMORY$
227 $NOOP()$
228$END$
229
230$FUNCTION GENERATE_OUTPUT$
231 OUTPUT_FORMAT("elf32-v850-rh850","elf32-v850-rh850","elf32-v850-rh850")$NL$
232 OUTPUT_ARCH(v850-rh850)$NL$
233 $NL$
234$END$
235
236$FUNCTION GENERATE_PROVIDE$
237 PROVIDE(_hardware_init_hook = 0);$NL$
238 PROVIDE(_software_init_hook = 0);$NL$
239 PROVIDE(_software_term_hook = 0);$NL$
240 PROVIDE(_bsssecinib_table = 0);$NL$
241 PROVIDE(_tnum_bsssec = 0);$NL$
242 PROVIDE(_datasecinib_table = 0);$NL$
243 PROVIDE(_tnum_datasec = 0);$NL$
244 $NL$
245
246 $IF LENGTH(OSAP.ID_LIST)$
247 $FOREACH domid OSAP.ID_LIST$
248 $IF !OSAP.TRUSTED[domid]$
249$ RX領域(専用)
250 PROVIDE(___start_text_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
251 PROVIDE(___limit_text_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
252$ R領域(専用)
253 PROVIDE(___start_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
254 PROVIDE(___limit_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
255$ RWX領域(専用)
256 PROVIDE(___start_ram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
257 PROVIDE(___limit_ram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
258 PROVIDE(___start_sram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
259 PROVIDE(___limit_sram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
260$ å…
261±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト
262 PROVIDE($FORMAT("___start_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
263 PROVIDE($FORMAT("___limit_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
264 PROVIDE($FORMAT("___start_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
265 PROVIDE($FORMAT("___limit_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
266 $END$
267 $END$
268 $NL$
269 $END$$NL$
270
271$ å…
272±æœ‰é ˜åŸŸ
273 PROVIDE(___start_text_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
274 PROVIDE(___limit_text_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
275 PROVIDE(___start_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
276 PROVIDE(___limit_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
277 PROVIDE(___start_ram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
278 PROVIDE(___limit_ram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
279 PROVIDE(___start_sram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
280 PROVIDE(___limit_sram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
281$ å…
282±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト領域å…
283¨ä½“
284 PROVIDE(___start_srpw_all = 0xfffffff0);$NL$
285 PROVIDE(___limit_srpw_all = 0xfffffff0);$NL$
286 PROVIDE(___start_ssrpw_all = 0xfffffff0);$NL$
287 PROVIDE(___limit_ssrpw_all = 0xfffffff0);$NL$
288 STARTUP(start.o);$NL$
289 ENTRY(__reset);$NL$
290 $NL$
291$END$
292
293$FUNCTION GENERATE_GP_LABEL$
294 $TAB$$TAB$__gp = . + 32K;$NL$
295 $TAB$$TAB$__tp = . + 32K;$NL$
296$END$
297
298$FILE "kernel_mem2.c"$
299
300$IF __v850e2v3__$
301$ // v850
302$TNUM_SHARED_REGION = 3$
303const uint32 tnum_shared_mem = $TNUM_SHARED_REGION * 2$;$NL$
304uint8 * const shared_meminib_table[$TNUM_SHARED_REGION * 2$] = {$NL$
305$TAB$((uint8 *)&__start_text_$OSAP.LABEL[TDOM_NONE]$),$TAB$/* iregion 2 */$NL$
306$TAB$((uint8 *)&__limit_text_$OSAP.LABEL[TDOM_NONE]$),$TAB$/* iregion 2 */$NL$
307
308$TAB$((uint8 *)NULL),$TAB$/* iregion 3 */$NL$
309$TAB$((uint8 *)NULL),$TAB$/* iregion 3 */$NL$
310
311$TAB$((uint8 *)NULL),$TAB$/* dregion 5 */$NL$
312$TAB$((uint8 *)NULL),$TAB$/* dregion 5 */$NL$
313};$NL$
314$NL$
315$ELIF __v850e3v5__$
316$ // rh850
317$IF TNUM_MPU_SHARED > 0$
318uint8 * const shared_meminib_table[$TNUM_MPU_SHARED * 3$] = {$NL$
319$FOREACH memid RANGE(0, TNUM_MPU_SHARED - 1)$
320 $TAB$((uint8 *)NULL),$TAB$/* MPUL $TNUM_MPU_REG - memid$ */$NL$
321 $TAB$((uint8 *)NULL),$TAB$/* MPUA $TNUM_MPU_REG - memid$ */$NL$
322 $TAB$((uint8 *)NULL),$TAB$/* MPAT $TNUM_MPU_REG - memid$ */$NL$
323$END$
324};$NL$
325$NL$
326$END$
327
328$
329$ GCC依存部のテンプレートファイルのインクルード
330$
331$INCLUDE "gcc/ldscript.tf"$
332
333$FILE "cfg2_out.tf"$
334$ LNKSEC.*の出力
335$$numls = $numls$$$$NL$
336$NL$
337$FOREACH lsid RANGE(1, numls)$
338 $$LNKSEC.MEMREG[$lsid$] = $LNKSEC.MEMREG[lsid]$$$$NL$
339 $$LNKSEC.SECTION[$lsid$] = $ESCSTR(LNKSEC.SECTION[lsid])$$$$NL$
340 $NL$
341$END$
342
343$JOINEACH tskid TSK.ID_LIST "\n"$
344 $$TSK.ID[$+tskid$] = $TSK.ID[tskid]$$$
345$END$
346$NL$
347
Note: See TracBrowser for help on using the repository browser.