source: atk2-sc3-1.4.0-ntisr/arch/v850_gcc/prc_opt.tf@ 172

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

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

  • Property svn:executable set to *
File size: 26.9 KB
Line 
1$ ======================================================================
2$
3$ TOPPERS ATK2
4$ Toyohashi Open Platform for Embedded Real-Time Systems
5$ Automotive Kernel Version 2
6$
7$ Copyright (C) 2013 by Embedded and Real-Time Systems Laboratory
8$ Graduate School of Information Science, Nagoya Univ., JAPAN
9$
10$ 上記著作権者
11は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13$ 変・再é…
14å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
15$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17$ スコード中に含まれていること.
18$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19$ 用できる形で再é…
20å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
21å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
22$ 者
23マニュアルなど)に,上記の著作権表示,この利用条件および下記
24$ の無保証規定を掲載すること.
25$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
26$ 用できない形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
28$ と.
29$ (a) 再é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
31マニュアルなど)に,上記の著
32$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
33$ (b) 再é…
34å¸ƒã®å½¢æ…
35‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
36$ 報告すること.
37$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
38$ 害からも,上記著作権者
39およびTOPPERSプロジェクトをå…
40è²¬ã™ã‚‹ã“と.
41$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
42$ 由に基づく請求からも,上記著作権者
43およびTOPPERSプロジェクトを
44$ å…
45è²¬ã™ã‚‹ã“と.
46$
47$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者
48お
49$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
50$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
51$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
52$ の責任を負わない.
53$
54$
55$ =====================================================================
56
57$DEBUG_OPT_TF = 1$
58
59$
60$ arch/v850_gcc/ldscript.tfのターゲット依存部
61$
62$FUNCTION GENERATE_MEMORY$
63 $NOOP()$
64$END$
65
66$FUNCTION GENERATE_OUTPUT$
67 OUTPUT_FORMAT("elf32-v850","elf32-v850","elf32-v850")$NL$
68 OUTPUT_ARCH(v850)$NL$
69 $NL$
70$END$
71
72$
73$ 保護ドメインのラベルの作成
74$ OSAP.LABEL[domid]:保護ドメインのラベル
75$
76$OSAP.LABEL[TDOM_KERNEL] = "kernel"$
77$FOREACH domid OSAP.ID_LIST$
78 $OSAP.LABEL[domid] = domid$
79$END$
80$OSAP.LABEL[TDOM_NONE] = "shared"$
81
82$
83$ 標準のセクションのメモリオブジェクト属性の定義
84$
85$MEMATR_TEXT = (TA_NOWRITE|TA_EXEC)$
86$MEMATR_RODATA = (TA_NOWRITE|TA_EXEC)$
87$MEMATR_DATA = TA_MEMINI$
88$MEMATR_BSS = TA_NULL$
89$MEMATR_PRSV = TA_MEMPRSV$
90$MEMATR_ROSDATA = (TA_SDATA|TA_MEMINI|TA_NOWRITE|TA_EXEC)$
91$MEMATR_SDATA = (TA_SDATA|TA_MEMINI)$
92$MEMATR_SBSS = TA_SDATA$
93
94
95$
96$ 保護ドメイン毎のデフォルトのアクセス許可パターンの作成
97$
98$DEFAULT_ACPTN[TDOM_KERNEL] = VALUE("TACP_KERNEL", TACP_KERNEL)$
99$FOREACH domid OSAP.ID_LIST$
100 $DEFAULT_ACPTN[domid] = VALUE(FORMAT("TACP(%1%)", domid), 1 << (domid - 1))$
101$END$
102$DEFAULT_ACPTN[TDOM_NONE] = VALUE("TACP_SHARED", TACP_SHARED)$
103
104$
105$ メモリ保護単位の実際のサイズを受け取り,受け取ったサイズ以上で,
106$ ARM MPUのサイズ制約を満たす最小値を返す
107$ ARM MPUのサイズ制約は,16B~4GBの範囲の2のべき乗
108$ ARGV[1]:実際のサイズ
109$ RESULT:ARM MPUのサイズ制約を満たす最小値
110$FUNCTION SEARCH_ARM_MPU_SIZE$
111 $IF ARGV[1] <= 0$
112 $RESULT = 0$
113 $ELSE$
114 $search_state = 0$
115 $FOREACH bit_offset { 31,30,...,4 }$
116 $compare_bit = 1 << bit_offset$
117 $IF ((ARGV[1] & compare_bit) != 0)$
118 $IF (search_state == 0)$
119 $result_size = compare_bit$
120 $search_state = 1$
121 $ELIF (search_state == 1)$
122 $result_size = (result_size << 1)$
123 $search_state = 2$
124 $END$
125 $END$
126 $END$
127 $IF (search_state == 0)$
128 $result_size = (1 << 4)$
129 $ELIF (search_state == 1) && ((ARGV[1] & 0xf) != 0)$
130 $result_size = (result_size << 1)$
131 $END$
132 $RESULT = result_size$
133 $END$
134$END$
135
136$
137$ 受け取った番地以上で,ARM MPUのアライン制約の最小値を返す
138$ ARGV[1]:番地
139$ ARGV[2]:サイズ
140$ RESULT:ARM MPUのアライン制約を満たす最小値
141$
142$FUNCTION SEARCH_ARM_MPU_ALIGN$
143 $result_align = ARGV[1]$
144 $compare_mask = ARGV[2] - 1$
145 $IF ((ARGV[1] & compare_mask) != 0)$
146 $result_align = ARGV[1] & ~compare_mask$
147 $result_align = result_align + ARGV[2]$
148 $END$
149
150 $RESULT = result_align$
151$END$
152
153$
154$ tsize_meminibの補正
155$ sdata_sharedのå…
156ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’マスクベース方式でアラインするため,
157$ その直前のセクションのlimitとsdata_sharedのstartが異なる可能性がある
158$ よって+1しておく
159$ prsv_sharedの終端アドレスをマスクベース方式でアラインするため,
160$ prsv_sharedのサイズが空でも,パス4ではstartとlimitが異なる可能性がある
161$ よって+1しておく
162$
163$FUNCTION CALC_TSIZE_MEMINIB$
164 $tsize_meminib = tsize_meminib + 2$
165$END$
166
167$OPTIMIZE_MEMINIB = 1$
168$OPTIMIZE_DATASEC_LIST = 1$
169$OPTIMIZE_BSSSEC_LIST = 1$
170
171$
172$ OSAP初期化コンテキストブロックのための宣言
173$
174$FUNCTION PREPARE_OSAPINICTXB$
175 $IF LENGTH(TSK.ID_LIST)$
176 $FOREACH tskid TSK.ID_LIST$
177 $IF !OSAP.TRUSTED[TSK.OSAPID[tskid]]$
178 extern uint8 $FORMAT("__start_user_stack%s", tskid)$;$NL$
179 extern uint8 $FORMAT("__limit_user_stack%s", tskid)$;$NL$
180 $END$
181 $END$
182 $END$
183 $FOREACH tskpri RANGE(TMIN_TPRI, TMAX_TPRI)$
184 $IF LENGTH(shared_ustack_size[tskpri])$
185 extern uint8 $FORMAT("__start_shared_user_stack%s", tskpri)$;$NL$
186 extern uint8 $FORMAT("__limit_shared_user_stack%s", tskpri)$;$NL$
187 $END$
188 $END$
189
190
191 $IF LENGTH(OSAP.ID_LIST)$
192 $FOREACH domid OSAP.ID_LIST$
193 $IF !OSAP.TRUSTED[domid]$
194$ RX領域(専用)
195 extern uint8 __start_text_$OSAP.LABEL[domid]$;$NL$
196 extern uint8 __limit_text_$OSAP.LABEL[domid]$;$NL$
197$ R領域(専用)
198 extern uint8 __start_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
199 extern uint8 __limit_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
200$ RWX領域(専用)
201 extern uint8 __start_ram_$OSAP.LABEL[domid]$;$NL$
202 extern uint8 __limit_ram_$OSAP.LABEL[domid]$;$NL$
203 extern uint8 __start_sram_$OSAP.LABEL[domid]$;$NL$
204 extern uint8 __limit_sram_$OSAP.LABEL[domid]$;$NL$
205$ å…
206±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト
207 extern uint8 $FORMAT("__start_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
208 extern uint8 $FORMAT("__limit_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
209 extern uint8 $FORMAT("__start_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
210 extern uint8 $FORMAT("__limit_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
211 $END$
212 $END$
213 $NL$
214 $END$$NL$
215
216$ å…
217±æœ‰é ˜åŸŸ
218 extern uint8 __start_text_$OSAP.LABEL[TDOM_NONE]$;$NL$
219 extern uint8 __limit_text_$OSAP.LABEL[TDOM_NONE]$;$NL$
220 extern uint8 __start_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
221 extern uint8 __limit_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
222 extern uint8 __start_ram_$OSAP.LABEL[TDOM_NONE]$;$NL$
223 extern uint8 __limit_ram_$OSAP.LABEL[TDOM_NONE]$;$NL$
224 extern uint8 __start_sram_$OSAP.LABEL[TDOM_NONE]$;$NL$
225 extern uint8 __limit_sram_$OSAP.LABEL[TDOM_NONE]$;$NL$
226$ å…
227±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト領域å…
228¨ä½“
229 extern uint8 __start_srpw_all;$NL$
230 extern uint8 __limit_srpw_all;$NL$
231 extern uint8 __start_ssrpw_all;$NL$
232 extern uint8 __limit_ssrpw_all;$NL$
233 $NL$
234$END$
235
236
237$FUNCTION GENERATE_TARGET_MPUINFOB$
238$
239$ 保護ドメイン初期化ブロックのmem依存部を生成
240$
241 $FILE "kernel_mem3.c"$
242
243 $PREPARE_OSAPINICTXB()$
244
245$END$
246
247$
248$ TSKINICTXBの初期化情
249報を生成
250$
251$DOMINICTXB_KERNEL = "{ NULL }"$
252
253$FUNCTION GENERATE_OSAPINIB_MPUINFOB$
254 $TAB$$TAB${$NL$
255 $IF !OSAP.TRUSTED[ARGV[1]]$
256$ RX領域(専用)
257 $TAB$$TAB$$TAB$( (uint8 *)&__start_text_$OSAP.LABEL[ARGV[1]]$ ), /* iregion 0 */$NL$
258 $TAB$$TAB$$TAB$( (uint8 *)&__limit_text_$OSAP.LABEL[ARGV[1]]$ ), /* iregion 0 */$NL$
259$ RX領域(専用ショートデータ)
260 $TAB$$TAB$$TAB$( (uint8 *)&__start_sram_$OSAP.LABEL[ARGV[1]]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ ),/* iregion 1 */$NL$
261 $TAB$$TAB$$TAB$( (uint8 *)&__limit_sram_$OSAP.LABEL[ARGV[1]]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ ),/* iregion 1 */$NL$
262$ RWX領域(専用)
263 $TAB$$TAB$$TAB$( (uint8 *)&__start_ram_$OSAP.LABEL[ARGV[1]]$ ),/* dregion 1 */$NL$
264 $TAB$$TAB$$TAB$( (uint8 *)&__limit_ram_$OSAP.LABEL[ARGV[1]]$ ),/* dregion 1 */$NL$
265$ RWX領域(専用ショートデータ)
266 $TAB$$TAB$$TAB$( (uint8 *)&__start_sram_$OSAP.LABEL[ARGV[1]]$ ),/* dregion 2 */$NL$
267 $TAB$$TAB$$TAB$( (uint8 *)&__limit_sram_$OSAP.LABEL[ARGV[1]]$ ),/* dregion 2 */$NL$
268$ å…
269±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト
270 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__start_ram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* dregion 3 */$NL$
271 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__limit_ram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* dregion 3 */$NL$
272$ å…
273±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト(ショートデータ)
274 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__start_sram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* dregion 4 */$NL$
275 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__limit_sram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* dregion 4 */$NL$
276 $ELSE$
277 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* iregion 0 */$NL$
278 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* iregion 0 */$NL$
279 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* iregion 1 */$NL$
280 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* iregion 1 */$NL$
281 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 1 */$NL$
282 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 1 */$NL$
283 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 2 */$NL$
284 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 2 */$NL$
285 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 3 */$NL$
286 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 3 */$NL$
287 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 4 */$NL$
288 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 4 */$NL$
289 $END$
290 $TAB$$TAB$}$NL$
291 $NL$
292$END$
293
294$FUNCTION GENERATE_TSKINICTXB$
295 $TAB$$TAB${$NL$
296 $TAB$$TAB$$TAB$$TSK.TINIB_SSTKSZ[ARGV[1]]$,$NL$
297 $TAB$$TAB$$TAB$((void *)((uint8 *)($TSK.TINIB_SSTK[ARGV[1]]$)
298 $SPC$+ ($TSK.TINIB_SSTKSZ[ARGV[1]]$))),$NL$
299 $IF OSAP.TRUSTED[TSK.OSAPID[ARGV[1]]]$
300 $TAB$$TAB$$TAB$0,$NL$
301 $TAB$$TAB$$TAB$0,$NL$
302 $ELSE$
303 $TAB$$TAB$$TAB$$TSK.TINIB_USTKSZ[ARGV[1]]$,$NL$
304 $TAB$$TAB$$TAB$((void *)((uint8 *)($TSK.TINIB_USTK[ARGV[1]]$)
305 $SPC$+ ($TSK.TINIB_USTKSZ[ARGV[1]]$))),$NL$
306 $END$
307 $TAB$$TAB$},$NL$
308$END$
309
310$FUNCTION GENERATE_STKMPUINFOB$
311 $TAB$$TAB${$NL$
312 $IF OSAP.TRUSTED[TSK.OSAPID[ARGV[1]]]$
313 $TAB$$TAB$$TAB$0,$NL$
314 $TAB$$TAB$$TAB$0,$NL$
315 $ELSE$
316 $IF EQ(TSK.STK[tskid],"NULL")$
317$ // stkがNULLの場合の処理
318 $IF LENGTH(TSK.SHARED_USTK_ID[tskid])$
319$ // å…
320±æœ‰ã‚¹ã‚¿ãƒƒã‚¯
321 $TAB$$TAB$$TAB$$FORMAT("&__start_shared_user_stack%s", TSK.PRIORITY[ARGV[1]])$,$NL$
322 $TAB$$TAB$$TAB$$FORMAT("(&__limit_shared_user_stack%s - 0x10)", TSK.PRIORITY[ARGV[1]])$,$NL$
323 $ELSE$
324$ // 固有スタック
325 $TAB$$TAB$$TAB$$FORMAT("&__start_user_stack%s", ARGV[1])$,$NL$
326 $TAB$$TAB$$TAB$$FORMAT("(&__limit_user_stack%s - 0x10)", ARGV[1])$,$NL$
327 $END$
328 $ELSE$
329$ // stkがNULLでない場合の処理
330 $TAB$$TAB$$TAB$$FORMAT("(uint8 *)%s", TSK.TINIB_USTK[ARGV[1]])$,$NL$
331 $TAB$$TAB$$TAB$$FORMAT("(uint8 *)((uint32)%s + %d - 0x10)", TSK.TINIB_USTK[ARGV[1]], TSK.TINIB_USTKSZ[ARGV[1]])$,$NL$
332 $END$
333 $END$
334 $TAB$$TAB$},$NL$
335$END$
336
337$INCLUDE "kernel/kernel_opt.tf"$
338
339$
340$ å…
341±æœ‰ãƒªãƒ¼ãƒ‰ãƒ©ã‚¤ãƒˆé ˜åŸŸ / å…
342±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライト領域(sdata) / rosdata_shared領域
343$ の情
344報取得
345$
346$check_shared_mo = 0x00$
347$check_srpw_mo = 0x00$
348$check_rosdata_mo = 0x00$
349$check_sdata_mo = 0x00$
350$LIST_SHARED_MO = {}$
351$LIST_SRPW_MO = {}$
352$LIST_ROSDATA_MO = {}$
353$preid = -1$
354$FOREACH moid MO_START_LIST$
355$ // メモリオブジェクトのå…
356ˆé ­ã‚’パス2時点での順にチェック
357 $IF LENGTH(FIND(MO_MPROTECT_LIST, moid))$
358$ // メモリ保護単位のå…
359ˆé ­ã®å ´åˆ
360 $IF (MO.ACPTN1[moid] == TACP_SHARED) && (MO.ACPTN2[moid] == TACP_SHARED)$
361 $IF ((check_shared_mo & 0x10) != 0x10)$
362$ // å…
363±æœ‰ãƒªãƒ¼ãƒ‰ãƒ©ã‚¤ãƒˆé ˜åŸŸã®å…
364ˆé ­ã®å ´åˆ
365 $SHARED_AREA_BASE[check_shared_mo] = MO.BASEADDR[moid]$
366 $SHARED_AREA_MO[check_shared_mo] = moid$
367 $LIST_SHARED_MO = APPEND(LIST_SHARED_MO, check_shared_mo)$
368 $check_shared_mo = check_shared_mo | 0x10$
369 $END$
370 $ELIF (check_shared_mo & 0x10) == 0x10$
371$ // å…
372±æœ‰ãƒªãƒ¼ãƒ‰ãƒ©ã‚¤ãƒˆé ˜åŸŸã®çµ‚端の場合
373 $IF preid == -1$
374 $ERROR$
375 $FORMAT("unexpected preid.")$
376 $END$
377 $END$
378 $check_shared_mo = check_shared_mo & 0x0f$
379 $SHARED_AREA_LIMIT[check_shared_mo] = MO.LIMITADDR[preid]$
380 $SHARED_AREA_SIZE[check_shared_mo] = SHARED_AREA_LIMIT[check_shared_mo] - SHARED_AREA_BASE[check_shared_mo]$
381 $SHARED_AREA_LIMIT_MO[check_shared_mo] = preid$
382 $check_shared_mo = check_shared_mo + 1$
383 $END$
384
385 $END$
386
387 $preid = moid$
388$END$
389$IF (check_shared_mo & 0x10) == 0x10$
390 $IF preid == -1$
391 $ERROR$
392 $FORMAT("unexpected preid.")$
393 $END$
394 $END$
395 $check_shared_mo = check_shared_mo & 0x0f$
396 $SHARED_AREA_LIMIT[check_shared_mo] = MO.LIMITADDR[preid]$
397 $SHARED_AREA_LIMIT_MO[check_shared_mo] = preid$
398 $SHARED_AREA_SIZE[check_shared_mo] = SHARED_AREA_LIMIT[check_shared_mo] - SHARED_AREA_BASE[check_shared_mo]$
399 $check_shared_mo = check_shared_mo + 1$
400$END$
401$
402$ エラーチェック
403$
404$FOREACH id LIST_SHARED_MO$
405 $IF DEBUG_OPT_TF$
406 $WARNING$
407 $id$$NL$
408 $SHARED_AREA_MO[id]$$NL$
409 $SHARED_AREA_LIMIT_MO[id]$$NL$
410 $FORMAT("0x%x", SHARED_AREA_BASE[id])$$NL$
411 $FORMAT("0x%x", SHARED_AREA_LIMIT[id])$$NL$
412 $FORMAT("0x%x", SHARED_AREA_SIZE[id])$$NL$
413 $END$
414 $END$
415 $IF ((MO.MEMATR[SHARED_AREA_MO[id]] & TA_SDATA) == TA_SDATA)$
416 $IF LENGTH(SHARED_DATA.BASE)$
417 $ERROR$
418 $FORMAT("unexpected mematr: %d, %x", id, MO.MEMATR[SHARED_AREA_MO[id]])$
419 $END$
420 $ELSE$
421 $SHARED_DATA.BASE = SHARED_AREA_BASE[id]$
422 $SHARED_DATA.LIMIT = SHARED_AREA_LIMIT[id]$
423 $SHARED_DATA.SIZE = SHARED_AREA_SIZE[id]$
424 $SHARED_DATA.BASE_MO = SHARED_AREA_MO[id]$
425 $SHARED_DATA.LIMIT_MO = SHARED_AREA_LIMIT_MO[id]$
426 $END$
427 $ELSE$
428 $ERROR$
429 $FORMAT("unexpected mematr: %d, %x", id, MO.MEMATR[SHARED_AREA_MO[id]])$
430 $END$
431 $END$
432$END$
433
434$
435$ data_sharedのé…
436ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’求める
437$
438$SHARED_DATA.REALSIZE = SEARCH_ARM_MPU_SIZE(SHARED_DATA.SIZE)$
439$SHARED_DATA.REALBASE = SEARCH_ARM_MPU_ALIGN(SHARED_DATA.BASE, SHARED_DATA.REALSIZE)$
440$IF DEBUG_OPT_TF$
441 $WARNING$
442 $FORMAT("data_shared: base[0x%x], size[0x%x]", SHARED_DATA.REALBASE, SHARED_DATA.REALSIZE)$$NL$
443 $END$
444$END$
445
446$
447$ é…
448ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定するセクションに対する処理
449$ é…
450ç½®æ›ãˆå¯¾è±¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³: 必
451ずあるかどうか
452$ srpw_data_all: 0
453$ srpw_sdata_all: 0
454$ rosdata_shared: 1
455$ sdata_shared: 1
456$ data_shared: 1
457$
458$check_shared_mo = 0$
459$preid = -1$
460$limit_align_flag = 1$
461$FOREACH moid MO_START_LIST$
462$ // メモリオブジェクトのå…
463ˆé ­ã‚’パス2時点での順にチェック
464 $IF MO.LINKER[moid]$
465 $IF DEBUG_OPT_TF$
466 $WARNING$
467 $FORMAT("check mo %d: SEFLAG=0x%x", moid, MO.SEFLAG[moid])$$NL$
468 $END$
469 $END$
470 $IF (moid == SHARED_DATA.BASE_MO)$
471$ // data_sharedのå…
472ˆé ­
473 $MO.REALBASE[moid] = SHARED_DATA.REALBASE$
474 $MO.COMMENT[moid] = "data_shared_top"$
475 $IF DEBUG_OPT_TF$
476 $WARNING$
477 $FORMAT("%s[%d]=0x%x", MO.COMMENT[moid], moid, MO.REALBASE[moid])$$NL$
478 $END$
479 $END$
480 $END$
481 $IF (preid == SHARED_DATA.LIMIT_MO)$
482$ // data_sharedの終端はマスクベース方式なのでサイズの倍数にアライン
483 $at_mo_order = FIND(MO_ORDER, preid)$
484 $check_flag = 1$
485 $WHILE check_flag$
486 $IF LENGTH(AT(MO_ORDER, at_mo_order))$
487 $IF DEBUG_OPT_TF$
488 $WARNING$
489 $FORMAT("check: %d, 0x%x", AT(MO_ORDER, at_mo_order), +MO.SEFLAG[AT(MO_ORDER, at_mo_order)])$$NL$
490 $END$
491 $END$
492 $IF (MO.SEFLAG[AT(MO_ORDER, at_mo_order)] & 0x20) == 0x20$
493 $IF DEBUG_OPT_TF$
494 $WARNING$
495 $FORMAT("hit: %d, 0x%x", AT(MO_ORDER, at_mo_order), +MO.SEFLAG[AT(MO_ORDER, at_mo_order)])$$NL$
496 $END$
497 $END$
498 $MO.REALALIGN[AT(MO_ORDER, at_mo_order)] = SHARED_DATA.REALSIZE$
499 $check_flag = 0$
500 $END$
501 $ELSE$
502 $ERROR$
503 $FORMAT("shared data does not have limit label")$$NL$
504 $END$
505 $check_flag = 0$
506 $END$
507 $at_mo_order = at_mo_order + 1$
508 $END$
509 $END$
510 $END$
511
512 $preid = moid$
513$END$
514$IF (preid == SHARED_DATA.LIMIT_MO)$
515$ // data_sharedの終端はマスクベース方式なのでサイズの倍数にアライン
516 $at_mo_order = FIND(MO_ORDER, preid)$
517 $check_flag = 1$
518 $WHILE check_flag$
519 $IF LENGTH(AT(MO_ORDER, at_mo_order))$
520 $IF DEBUG_OPT_TF$
521 $WARNING$
522 $FORMAT("check: %d, 0x%x", AT(MO_ORDER, at_mo_order), +MO.SEFLAG[AT(MO_ORDER, at_mo_order)])$$NL$
523 $END$
524 $END$
525 $IF (MO.SEFLAG[AT(MO_ORDER, at_mo_order)] & 0x20) == 0x20$
526 $IF DEBUG_OPT_TF$
527 $WARNING$
528 $FORMAT("hit: %d, 0x%x", AT(MO_ORDER, at_mo_order), +MO.SEFLAG[AT(MO_ORDER, at_mo_order)])$$NL$
529 $END$
530 $END$
531 $MO.REALALIGN[AT(MO_ORDER, at_mo_order)] = SHARED_DATA.REALSIZE$
532 $check_flag = 0$
533 $END$
534 $ELSE$
535 $ERROR$
536 $FORMAT("shared data does not have limit label")$$NL$
537 $END$
538 $check_flag = 0$
539 $END$
540 $at_mo_order = at_mo_order + 1$
541 $END$
542$END$
543
544$
545$ arch/v850_gcc/ldscript.tfのターゲット依存部
546$
547
548$FUNCTION GENERATE_PROVIDE$
549 PROVIDE(_hardware_init_hook = 0);$NL$
550 PROVIDE(_software_init_hook = 0);$NL$
551 PROVIDE(_software_term_hook = 0);$NL$
552 PROVIDE(_bsssecinib_table = 0);$NL$
553 PROVIDE(_tnum_bsssec = 0);$NL$
554 PROVIDE(_datasecinib_table = 0);$NL$
555 PROVIDE(_tnum_datasec = 0);$NL$
556 $NL$
557
558 $IF LENGTH(OSAP.ID_LIST)$
559 $FOREACH domid OSAP.ID_LIST$
560 $IF !OSAP.TRUSTED[domid]$
561$ RX領域(専用)
562 PROVIDE(___start_text_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
563 PROVIDE(___limit_text_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
564$ R領域(専用)
565 PROVIDE(___start_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
566 PROVIDE(___limit_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
567$ RWX領域(専用)
568 PROVIDE(___start_ram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
569 PROVIDE(___limit_ram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
570 PROVIDE(___start_sram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
571 PROVIDE(___limit_sram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
572$ å…
573±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト
574 PROVIDE($FORMAT("___start_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
575 PROVIDE($FORMAT("___limit_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
576 PROVIDE($FORMAT("___start_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
577 PROVIDE($FORMAT("___limit_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
578 $END$
579 $END$
580 $NL$
581 $END$$NL$
582
583$ å…
584±æœ‰é ˜åŸŸ
585 PROVIDE(___start_text_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
586 PROVIDE(___limit_text_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
587 PROVIDE(___start_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
588 PROVIDE(___limit_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
589 PROVIDE(___start_ram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
590 PROVIDE(___limit_ram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
591 PROVIDE(___start_sram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
592 PROVIDE(___limit_sram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
593$ å…
594±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト領域å…
595¨ä½“
596 PROVIDE(___start_srpw_all = 0xfffffff0);$NL$
597 PROVIDE(___limit_srpw_all = 0xfffffff0);$NL$
598 PROVIDE(___start_ssrpw_all = 0xfffffff0);$NL$
599 PROVIDE(___limit_ssrpw_all = 0xfffffff0);$NL$
600 STARTUP(start.o)
601 ENTRY(__reset)
602 $NL$
603$END$
604
605$FUNCTION GENERATE_GP_LABEL$
606 $TAB$$TAB$__gp = . + 32K;$NL$
607 $TAB$$TAB$__tp = . + 32K;$NL$
608$END$
609
610$TOPPERS_ATTMOD = TOPPERS_ATTSEC + 1$
611$TOPPERS_MPFAREA = TOPPERS_ATTSEC + 2$
612
613$INCLUDE "v850_gcc/ldscript.tf"$
614
615$FOREACH moid MO_ORDER$
616 $IF MO.LINKER[moid]$
617$ // セクションの開始記述の生成
618 $IF (MO.SEFLAG[moid] & 0x01) != 0$
619$ // å…
620±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライト領域のå…
621¨ä½“の開始番地
622 $IF (MO.SEFLAG[moid] & 0x100) != 0$
623$ // 最初に更新された値が有効となる
624 $IF !LENGTH(SRPW.BASE)$
625 $SRPW.BASE = MO.BASEADDR[moid]$
626 $IF DEBUG_OPT_TF$
627 $WARNING$
628 $FORMAT("hit: %d, 0x%x", moid, +MO.SEFLAG[moid])$$NL$
629 $END$
630 $END$
631 $END$
632 $ELIF MO.ACPTN1[moid] == 0 && MO.ACPTN2[moid] == TACP_SHARED
633 && (MO.MEMATR[moid] & TA_SDATA) != 0$
634$ // 最初に更新された値が有効となる
635 $IF !LENGTH(SRPW.BASE)$
636 $SRPW.BASE = MO.BASEADDR[moid]$
637 $END$
638 $END$
639 $END$
640
641$ // å…
642±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライト領域のå…
643¨ä½“の終了番地
644 $IF (MO.SEFLAG[moid] & 0x200) != 0$
645 $IF !LENGTH(SRPW.BASE)$
646 $ERROR$
647 "start_srpw label is not found"
648 $END$
649 $END$
650$ // 最後に更新された値が有効となる
651$ $SRPW.LIMIT = MO.LIMITADDR[moid]$
652 $SRPW.LIMIT = LIMIT_SYMBOL(MO.MLABEL[moid])$
653 $IF DEBUG_OPT_TF$
654 $WARNING$
655 $FORMAT("hit end: %d, 0x%x", moid, SRPW.LIMIT)$$NL$
656 $END$
657 $END$
658 $ELIF MO.ACPTN1[moid] == 0 && MO.ACPTN2[moid] == TACP_SHARED
659 && (MO.MEMATR[moid] & TA_SDATA) != 0$
660$ // 最後に更新された値が有効となる
661$ $SRPW.LIMIT = MO.LIMITADDR[moid]$
662 $SRPW.LIMIT = LIMIT_SYMBOL(MO.MLABEL[moid])$
663 $IF DEBUG_OPT_TF$
664 $WARNING$
665 $FORMAT("hit end: %d, 0x%x", moid, SRPW.LIMIT)$$NL$
666 $END$
667 $END$
668 $END$
669
670 $END$
671$END$
672
673$IF DEBUG_OPT_TF$
674 $WARNING$
675 $FORMAT("srpw area: 0x%x, 0x%x", SRPW.BASE, SRPW.LIMIT)$$NL$
676 $END$
677$END$
678
679$
680$ å…
681±æœ‰é ˜åŸŸã®åˆæœŸåŒ–ブロックを生成
682$
683$FILE "kernel_mem3.c"$
684
685$TNUM_SHARED_REGION = 3$
686const uint32 tnum_shared_mem = $TNUM_SHARED_REGION * 2$;$NL$
687uint8 * const shared_meminib_table[$TNUM_SHARED_REGION * 2$] = {$NL$
688$shared_info = SYMBOL("shared_meminib_table")$
689$ RX領域(å…
690±æœ‰ï¼‰
691$start_label = PEEK(shared_info, 4)$
692$limit_label = PEEK(shared_info + 4, 4)$
693$TAB$((uint8 *)&__start_text_$OSAP.LABEL[TDOM_NONE]$),$TAB$/* iregion 2 */$NL$
694$TAB$((uint8 *)&__limit_text_$OSAP.LABEL[TDOM_NONE]$),$TAB$/* iregion 2 */$NL$
695
696$ RX領域(å…
697±æœ‰ã‚·ãƒ§ãƒ¼ãƒˆãƒ‡ãƒ¼ã‚¿ï¼Œå…
698±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトのå…
699¨ä½“)
700$ rosdata_shared
701$ srpw_data_all
702$start_label = PEEK(shared_info + 8, 4)$
703$limit_label = PEEK(shared_info + 12, 4)$
704$IF LENGTH(SRPW.BASE) && LENGTH(SRPW.LIMIT)$
705 $TAB$((uint8 *)$FORMAT("0x%x", SRPW.BASE)$),$TAB$/* iregion 3 */$NL$
706 $TAB$((uint8 *)$FORMAT("0x%x", SRPW.LIMIT)$),$TAB$/* iregion 3 */$NL$
707$ELSE$
708 $TAB$((uint8 *)NULL),$TAB$/* iregion 3 */$NL$
709 $TAB$((uint8 *)NULL),$TAB$/* iregion 3 */$NL$
710$END$
711
712$ RWX領域(å…
713±æœ‰ã‚·ãƒ§ãƒ¼ãƒˆãƒ‡ãƒ¼ã‚¿ï¼Œå…
714±æœ‰ãƒ‡ãƒ¼ã‚¿ï¼‰
715$ //sdata_sharedのå…
716ˆé ­ã‹ã‚‰data_sharedの終端(dataのå…
717ˆé ­ï¼‰ã¾ã§
718$ data_sharedのå…
719ˆé ­ã‹ã‚‰sdata_sharedの終端(dataのå…
720ˆé ­ï¼‰ã¾ã§
721$start_label = PEEK(shared_info + 16, 4)$
722$limit_label = PEEK(shared_info + 20, 4)$
723$start_label = SHARED_DATA.REALBASE$
724$limit_label = (SHARED_DATA.REALSIZE - 1) & ~0x0f$
725$TAB$$FORMAT("( (uint8 *)0x%x )", start_label)$,$TAB$/* dregion 5 : $FORMAT("0x%x", start_label)$ */$NL$
726$TAB$$FORMAT("( (uint8 *)0x%x )", limit_label)$,$TAB$/* dregion 5 : $FORMAT("0x%x", limit_label)$ */$NL$
727
728};$NL$
729$NL$
730
731
Note: See TracBrowser for help on using the repository browser.