source: atk2-sc3-1.4.0-ntisr/arch/v850_ghs/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: 49.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$
58$ V850E2M用
59$ RH850では使用しない
60$
61
62$DEBUG_OPT_TF = 1$
63
64$
65$ arch/v850_gcc/ldscript.tfのターゲット依存部
66$
67$FUNCTION GENERATE_MEMORY$
68 $NOOP()$
69$END$
70
71$FUNCTION GENERATE_OUTPUT$
72 $NL$
73$END$
74
75$
76$ 保護ドメインのラベルの作成
77$ OSAP.LABEL[domid]:保護ドメインのラベル
78$
79$OSAP.LABEL[TDOM_KERNEL] = "kernel"$
80$FOREACH domid OSAP.ID_LIST$
81 $OSAP.LABEL[domid] = domid$
82$END$
83$OSAP.LABEL[TDOM_NONE] = "shared"$
84
85$
86$ 標準のセクションのメモリオブジェクト属性の定義
87$
88$MEMATR_TEXT = (TA_NOWRITE|TA_EXEC)$
89$MEMATR_RODATA = (TA_NOWRITE|TA_EXEC)$
90$MEMATR_DATA = TA_MEMINI$
91$MEMATR_BSS = TA_NULL$
92$MEMATR_PRSV = TA_MEMPRSV$
93$MEMATR_ROSDATA = (TA_SDATA|TA_MEMINI|TA_NOWRITE|TA_EXEC)$
94$MEMATR_SDATA = (TA_SDATA|TA_MEMINI)$
95$MEMATR_SBSS = TA_SDATA$
96
97
98$
99$ 保護ドメイン毎のデフォルトのアクセス許可パターンの作成
100$
101$DEFAULT_ACPTN[TDOM_KERNEL] = VALUE("TACP_KERNEL", TACP_KERNEL)$
102$FOREACH domid OSAP.ID_LIST$
103 $DEFAULT_ACPTN[domid] = VALUE(FORMAT("TACP(%1%)", domid), 1 << (domid - 1))$
104$END$
105$DEFAULT_ACPTN[TDOM_NONE] = VALUE("TACP_SHARED", TACP_SHARED)$
106
107$
108$ メモリ保護単位の実際のサイズを受け取り,受け取ったサイズ以上で,
109$ ARM MPUのサイズ制約を満たす最小値を返す
110$ ARM MPUのサイズ制約は,16B~4GBの範囲の2のべき乗
111$ ARGV[1]:実際のサイズ
112$ RESULT:ARM MPUのサイズ制約を満たす最小値
113$FUNCTION SEARCH_ARM_MPU_SIZE$
114 $IF ARGV[1] <= 0$
115 $RESULT = 0$
116 $ELSE$
117 $search_state = 0$
118 $FOREACH bit_offset { 31,30,...,4 }$
119 $compare_bit = 1 << bit_offset$
120 $IF ((ARGV[1] & compare_bit) != 0)$
121 $IF (search_state == 0)$
122 $result_size = compare_bit$
123 $search_state = 1$
124 $ELIF (search_state == 1)$
125 $result_size = (result_size << 1)$
126 $search_state = 2$
127 $END$
128 $END$
129 $END$
130 $IF (search_state == 0)$
131 $result_size = (1 << 4)$
132 $ELIF (search_state == 1) && ((ARGV[1] & 0xf) != 0)$
133 $result_size = (result_size << 1)$
134 $END$
135 $RESULT = result_size$
136 $END$
137$END$
138
139$
140$ 受け取った番地以上で,ARM MPUのアライン制約の最小値を返す
141$ ARGV[1]:番地
142$ ARGV[2]:サイズ
143$ RESULT:ARM MPUのアライン制約を満たす最小値
144$
145$FUNCTION SEARCH_ARM_MPU_ALIGN$
146 $result_align = ARGV[1]$
147 $compare_mask = ARGV[2] - 1$
148 $IF ((ARGV[1] & compare_mask) != 0)$
149 $result_align = ARGV[1] & ~compare_mask$
150 $result_align = result_align + ARGV[2]$
151 $END$
152
153 $RESULT = result_align$
154$END$
155
156$
157$ tsize_meminibの補正
158$ sdata_sharedのå…
159ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’マスクベース方式でアラインするため,
160$ その直前のセクションのlimitとsdata_sharedのstartが異なる可能性がある
161$ よって+1しておく
162$ prsv_sharedの終端アドレスをマスクベース方式でアラインするため,
163$ prsv_sharedのサイズが空でも,パス4ではstartとlimitが異なる可能性がある
164$ よって+1しておく
165$
166$FUNCTION CALC_TSIZE_MEMINIB$
167 $tsize_meminib = tsize_meminib + 3$
168$END$
169
170$OPTIMIZE_MEMINIB = 1$
171$OPTIMIZE_DATASEC_LIST = 1$
172$OPTIMIZE_BSSSEC_LIST = 1$
173
174$
175$ OSAP初期化コンテキストブロックのための宣言
176$
177$FUNCTION PREPARE_OSAPINICTXB$
178 $IF LENGTH(TSK.ID_LIST)$
179 $FOREACH tskid TSK.ID_LIST$
180 $IF !OSAP.TRUSTED[TSK.OSAPID[tskid]]$
181 extern uint8 $FORMAT("__start_user_stack%s", tskid)$;$NL$
182 extern uint8 $FORMAT("__limit_user_stack%s", tskid)$;$NL$
183 $END$
184 $END$
185 $END$
186 $FOREACH tskpri RANGE(TMIN_TPRI, TMAX_TPRI)$
187 $IF LENGTH(shared_ustack_size[tskpri])$
188 extern uint8 $FORMAT("__start_shared_user_stack%s", tskpri)$;$NL$
189 extern uint8 $FORMAT("__limit_shared_user_stack%s", tskpri)$;$NL$
190 $END$
191 $END$
192
193
194 $IF LENGTH(OSAP.ID_LIST)$
195 $FOREACH domid OSAP.ID_LIST$
196 $IF !OSAP.TRUSTED[domid]$
197$ RX領域(専用)
198 extern uint8 __start_text_$OSAP.LABEL[domid]$;$NL$
199 extern uint8 __limit_text_$OSAP.LABEL[domid]$;$NL$
200$ R領域(専用)
201 extern uint8 __start_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
202 extern uint8 __limit_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
203$ RWX領域(専用)
204 extern uint8 __start_ram_$OSAP.LABEL[domid]$;$NL$
205 extern uint8 __limit_ram_$OSAP.LABEL[domid]$;$NL$
206 extern uint8 __start_sram_$OSAP.LABEL[domid]$;$NL$
207 extern uint8 __limit_sram_$OSAP.LABEL[domid]$;$NL$
208$ å…
209±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト
210 extern uint8 $FORMAT("__start_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
211 extern uint8 $FORMAT("__limit_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
212 extern uint8 $FORMAT("__start_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
213 extern uint8 $FORMAT("__limit_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$;$NL$
214$ extern uint8 $FORMAT("__start_ram_%s_srpw", OSAP.LABEL[domid])$;$NL$
215$ extern uint8 $FORMAT("__limit_ram_%s_srpw", OSAP.LABEL[domid])$;$NL$
216$ extern uint8 $FORMAT("__start_sram_%s_srpw", OSAP.LABEL[domid])$;$NL$
217$ extern uint8 $FORMAT("__limit_sram_%s_srpw", OSAP.LABEL[domid])$;$NL$
218 $END$
219 $END$
220 $NL$
221 $END$$NL$
222
223$ å…
224±æœ‰é ˜åŸŸ
225 extern uint8 __start_text_$OSAP.LABEL[TDOM_NONE]$;$NL$
226 extern uint8 __limit_text_$OSAP.LABEL[TDOM_NONE]$;$NL$
227 extern uint8 __start_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
228 extern uint8 __limit_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$;$NL$
229 extern uint8 __start_ram_$OSAP.LABEL[TDOM_NONE]$;$NL$
230 extern uint8 __limit_ram_$OSAP.LABEL[TDOM_NONE]$;$NL$
231 extern uint8 __start_sram_$OSAP.LABEL[TDOM_NONE]$;$NL$
232 extern uint8 __limit_sram_$OSAP.LABEL[TDOM_NONE]$;$NL$
233$ å…
234±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト領域å…
235¨ä½“
236 extern uint8 __start_srpw_all;$NL$
237 extern uint8 __limit_srpw_all;$NL$
238 extern uint8 __start_ssrpw_all;$NL$
239 extern uint8 __limit_ssrpw_all;$NL$
240 $NL$
241$ extern const OSAPMPUINFOB_INFO _kernel_osap_mpu_info_tbl[];$NL$
242$END$
243
244
245$FUNCTION GENERATE_TARGET_MPUINFOB$
246$
247$ 保護ドメイン初期化ブロックのmem依存部を生成
248$
249 $FILE "kernel_mem3.c"$
250
251 $PREPARE_OSAPINICTXB()$
252
253$END$
254
255$
256$ TSKINICTXBの初期化情
257報を生成
258$
259$DOMINICTXB_KERNEL = "{ NULL }"$
260
261$FUNCTION GENERATE_OSAPINIB_MPUINFOB$
262 $TAB$$TAB${$NL$
263 $IF !OSAP.TRUSTED[ARGV[1]]$
264$ RX領域(専用)
265 $TAB$$TAB$$TAB$( (uint8 *)&__start_text_$OSAP.LABEL[ARGV[1]]$ ), /* iregion 0 */$NL$
266 $TAB$$TAB$$TAB$( (uint8 *)&__limit_text_$OSAP.LABEL[ARGV[1]]$ ), /* iregion 0 */$NL$
267$ RX領域(専用ショートデータ)
268 $TAB$$TAB$$TAB$( (uint8 *)&__start_sram_$OSAP.LABEL[ARGV[1]]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ ),/* iregion 1 */$NL$
269 $TAB$$TAB$$TAB$( (uint8 *)&__limit_sram_$OSAP.LABEL[ARGV[1]]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ ),/* iregion 1 */$NL$
270$ RWX領域(専用)
271 $TAB$$TAB$$TAB$( (uint8 *)&__start_ram_$OSAP.LABEL[ARGV[1]]$ ),/* dregion 1 */$NL$
272 $TAB$$TAB$$TAB$( (uint8 *)&__limit_ram_$OSAP.LABEL[ARGV[1]]$ ),/* dregion 1 */$NL$
273$ RWX領域(専用ショートデータ)
274 $TAB$$TAB$$TAB$( (uint8 *)&__start_sram_$OSAP.LABEL[ARGV[1]]$ ),/* dregion 2 */$NL$
275 $TAB$$TAB$$TAB$( (uint8 *)&__limit_sram_$OSAP.LABEL[ARGV[1]]$ ),/* dregion 2 */$NL$
276$ å…
277±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト
278 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__start_ram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* dregion 3 */$NL$
279 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__limit_ram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* dregion 3 */$NL$
280$ $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__start_ram_%s_srpw )", OSAP.LABEL[ARGV[1]])$,/* dregion 3 */$NL$
281$ $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__limit_ram_%s_srpw )", OSAP.LABEL[ARGV[1]])$,/* dregion 3 */$NL$
282$ å…
283±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト(ショートデータ)
284 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__start_sram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* dregion 4 */$NL$
285 $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__limit_sram_%s_%x_%x )", OSAP.LABEL[ARGV[1]], +DEFAULT_ACPTN[ARGV[1]], +TACP_SHARED)$,/* dregion 4 */$NL$
286$ $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__start_sram_%s_srpw )", OSAP.LABEL[ARGV[1]])$,/* dregion 4 */$NL$
287$ $TAB$$TAB$$TAB$$FORMAT("( (uint8 *)&__limit_sram_%s_srpw )", OSAP.LABEL[ARGV[1]])$,/* dregion 4 */$NL$
288 $ELSE$
289 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* iregion 0 */$NL$
290 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* iregion 0 */$NL$
291 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* iregion 1 */$NL$
292 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* iregion 1 */$NL$
293 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 1 */$NL$
294 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 1 */$NL$
295 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 2 */$NL$
296 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 2 */$NL$
297 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 3 */$NL$
298 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 3 */$NL$
299 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 4 */$NL$
300 $TAB$$TAB$$TAB$( (uint8 *)NULL ),/* dregion 4 */$NL$
301 $END$
302 $TAB$$TAB$}$NL$
303 $NL$
304$END$
305
306$FUNCTION GENERATE_TSKINICTXB$
307 $TAB$$TAB${$NL$
308 $TAB$$TAB$$TAB$$TSK.TINIB_SSTKSZ[ARGV[1]]$,$NL$
309 $TAB$$TAB$$TAB$((void *)((uint8 *)($TSK.TINIB_SSTK[ARGV[1]]$)
310 $SPC$+ ($TSK.TINIB_SSTKSZ[ARGV[1]]$))),$NL$
311 $IF OSAP.TRUSTED[TSK.OSAPID[ARGV[1]]]$
312 $TAB$$TAB$$TAB$0,$NL$
313 $TAB$$TAB$$TAB$0,$NL$
314 $ELSE$
315 $TAB$$TAB$$TAB$$TSK.TINIB_USTKSZ[ARGV[1]]$,$NL$
316 $TAB$$TAB$$TAB$((void *)((uint8 *)($TSK.TINIB_USTK[ARGV[1]]$)
317 $SPC$+ ($TSK.TINIB_USTKSZ[ARGV[1]]$))),$NL$
318 $END$
319 $TAB$$TAB$},$NL$
320$END$
321
322$FUNCTION GENERATE_STKMPUINFOB$
323 $TAB$$TAB${$NL$
324 $IF OSAP.TRUSTED[TSK.OSAPID[ARGV[1]]]$
325 $TAB$$TAB$$TAB$0,$NL$
326 $TAB$$TAB$$TAB$0,$NL$
327 $ELSE$
328 $IF EQ(TSK.STK[tskid],"NULL")$
329$ // stkがNULLの場合の処理
330 $IF LENGTH(TSK.SHARED_USTK_ID[tskid])$
331$ // å…
332±æœ‰ã‚¹ã‚¿ãƒƒã‚¯
333 $TAB$$TAB$$TAB$$FORMAT("&__start_shared_user_stack%s", TSK.PRIORITY[ARGV[1]])$,$NL$
334 $TAB$$TAB$$TAB$$FORMAT("(&__limit_shared_user_stack%s - 0x10)", TSK.PRIORITY[ARGV[1]])$,$NL$
335 $ELSE$
336$ // 固有スタック
337 $TAB$$TAB$$TAB$$FORMAT("&__start_user_stack%s", ARGV[1])$,$NL$
338 $TAB$$TAB$$TAB$$FORMAT("(&__limit_user_stack%s - 0x10)", ARGV[1])$,$NL$
339 $END$
340 $ELSE$
341$ // stkがNULLでない場合の処理
342 $TAB$$TAB$$TAB$$FORMAT("(uint8 *)%s", TSK.TINIB_USTK[ARGV[1]])$,$NL$
343 $TAB$$TAB$$TAB$$FORMAT("(uint8 *)((uint32)%s + %d - 0x10)", TSK.TINIB_USTK[ARGV[1]], TSK.TINIB_USTKSZ[ARGV[1]])$,$NL$
344 $END$
345 $END$
346 $TAB$$TAB$},$NL$
347$END$
348
349$INCLUDE "kernel/kernel_opt.tf"$
350
351$
352$ å…
353±æœ‰ãƒªãƒ¼ãƒ‰ãƒ©ã‚¤ãƒˆé ˜åŸŸ / å…
354±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライト領域(sdata) / rosdata_shared領域
355$ の情
356報取得
357$
358$ $check_shared_mo = 0x00$
359$ $check_srpw_mo = 0x00$
360$ $check_rosdata_mo = 0x00$
361$ $check_sdata_mo = 0x00$
362$ $LIST_SHARED_MO = {}$
363$ $LIST_SRPW_MO = {}$
364$ $LIST_ROSDATA_MO = {}$
365$ $preid = -1$
366$ $FOREACH moid MO_START_LIST$
367$ $ // メモリオブジェクトのå…
368ˆé ­ã‚’パス2時点での順にチェック
369$ $IF LENGTH(FIND(MO_MPROTECT_LIST, moid))$
370$ $ // メモリ保護単位のå…
371ˆé ­ã®å ´åˆ
372$ $IF !LENGTH(SDATA_BASE) && ((MO.MEMATR[moid] & TA_SDATA) == TA_SDATA)$
373$ $ // ショートデータセクションのå…
374ˆé ­
375$ $SDATA_BASE = MO.BASEADDR[moid]$
376$ $check_sdata_mo = check_sdata_mo | 0x10$
377$ $ELIF ((MO.MEMATR[moid] & TA_SDATA) == 0)
378$ $ // ショートデータセクションの終端
379$ && ((check_sdata_mo & 0x10) == 0x10)$
380$ $IF preid == -1$
381$ $ERROR$
382$ $FORMAT("unexpected preid.")$
383$ $END$
384$ $END$
385$ $check_sdata_mo = check_sdata_mo & 0x0f$
386$ $SDATA_LIMIT = MO.LIMITADDR[preid]$
387$ $SDATA_LIMIT_MO = preid$
388$ $END$
389$
390$ $IF (MO.ACPTN1[moid] == TACP_SHARED) && (MO.ACPTN2[moid] == TACP_SHARED)$
391$ $IF ((check_shared_mo & 0x10) != 0x10)$
392$ $ // å…
393±æœ‰ãƒªãƒ¼ãƒ‰ãƒ©ã‚¤ãƒˆé ˜åŸŸã®å…
394ˆé ­ã®å ´åˆ
395$ $SHARED_AREA_BASE[check_shared_mo] = MO.BASEADDR[moid]$
396$ $SHARED_AREA_MO[check_shared_mo] = moid$
397$ $LIST_SHARED_MO = APPEND(LIST_SHARED_MO, check_shared_mo)$
398$ $check_shared_mo = check_shared_mo | 0x10$
399$ $END$
400$ $ELIF (check_shared_mo & 0x10) == 0x10$
401$ $ // å…
402±æœ‰ãƒªãƒ¼ãƒ‰ãƒ©ã‚¤ãƒˆé ˜åŸŸã®çµ‚端の場合
403$ $IF preid == -1$
404$ $ERROR$
405$ $FORMAT("unexpected preid.")$
406$ $END$
407$ $END$
408$ $check_shared_mo = check_shared_mo & 0x0f$
409$ $SHARED_AREA_LIMIT[check_shared_mo] = MO.LIMITADDR[preid]$
410$ $SHARED_AREA_SIZE[check_shared_mo] = SHARED_AREA_LIMIT[check_shared_mo] - SHARED_AREA_BASE[check_shared_mo]$
411$ $SHARED_AREA_LIMIT_MO[check_shared_mo] = preid$
412$ $check_shared_mo = check_shared_mo + 1$
413$ $END$
414$
415$ $IF LENGTH(MO.SRPW[moid]) && (MO.SRPW[moid])$
416$ $IF ((check_srpw_mo & 0x10) != 0x10)$
417$ $ // å…
418±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライト領域のå…
419ˆé ­ã®å ´åˆ
420$ $SRPW_AREA_BASE[check_srpw_mo] = MO.BASEADDR[moid]$
421$ $SRPW_AREA_MO[check_srpw_mo] = moid$
422$ $LIST_SRPW_MO = APPEND(LIST_SRPW_MO, check_srpw_mo)$
423$ $check_srpw_mo = check_srpw_mo | 0x10$
424$ $END$
425$ $ELIF (check_srpw_mo & 0x10) == 0x10$
426$ $ // å…
427±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライト領域の終端の場合
428$ $IF preid == -1$
429$ $ERROR$
430$ $FORMAT("unexpected preid.")$
431$ $END$
432$ $END$
433$ $check_srpw_mo = check_srpw_mo & 0x0f$
434$ $SRPW_AREA_LIMIT[check_srpw_mo] = MO.LIMITADDR[preid]$
435$ $SRPW_AREA_SIZE[check_srpw_mo] = SRPW_AREA_LIMIT[check_srpw_mo] - SRPW_AREA_BASE[check_srpw_mo]$
436$ $SRPW_AREA_LIMIT_MO[check_srpw_mo] = preid$
437$ $check_srpw_mo = check_srpw_mo + 1$
438$ $END$
439$
440$ $IF (MO.ACPTN1[moid] == 0) && (MO.ACPTN2[moid] == TACP_SHARED)
441$ && (MO.MEMATR[moid] & TA_SDATA) && (MO.OSAPID[moid] == TDOM_NONE)$
442$ $IF ((check_rosdata_mo & 0x10) != 0x10)$
443$ $ // rosdata_shared領域のå…
444ˆé ­ã®å ´åˆ
445$ $ROSDATA_AREA_BASE[check_rosdata_mo] = MO.BASEADDR[moid]$
446$ $ROSDATA_AREA_MO[check_rosdata_mo] = moid$
447$ $LIST_ROSDATA_MO = APPEND(LIST_ROSDATA_MO, check_rosdata_mo)$
448$ $check_rosdata_mo = check_rosdata_mo | 0x10$
449$ $END$
450$ $ELIF (check_rosdata_mo & 0x10) == 0x10$
451$ $ // rosdata_shared領域の終端の場合
452$ $IF preid == -1$
453$ $ERROR$
454$ $FORMAT("unexpected preid.")$
455$ $END$
456$ $END$
457$ $check_rosdata_mo = check_rosdata_mo & 0x0f$
458$ $ROSDATA_AREA_LIMIT[check_rosdata_mo] = MO.LIMITADDR[preid]$
459$ $ROSDATA_AREA_SIZE[check_rosdata_mo] = ROSDATA_AREA_LIMIT[check_rosdata_mo] - ROSDATA_AREA_BASE[check_rosdata_mo]$
460$ $ROSDATA_AREA_LIMIT_MO[check_rosdata_mo] = preid$
461$ $check_rosdata_mo = check_rosdata_mo + 1$
462$ $END$
463$ $END$
464$
465$ $preid = moid$
466$ $END$
467$ $IF (check_shared_mo & 0x10) == 0x10$
468$ $IF preid == -1$
469$ $ERROR$
470$ $FORMAT("unexpected preid.")$
471$ $END$
472$ $END$
473$ $check_shared_mo = check_shared_mo & 0x0f$
474$ $SHARED_AREA_LIMIT[check_shared_mo] = MO.LIMITADDR[preid]$
475$ $SHARED_AREA_LIMIT_MO[check_shared_mo] = preid$
476$ $SHARED_AREA_SIZE[check_shared_mo] = SHARED_AREA_LIMIT[check_shared_mo] - SHARED_AREA_BASE[check_shared_mo]$
477$ $check_shared_mo = check_shared_mo + 1$
478$ $END$
479$ $IF (check_srpw_mo & 0x10) == 0x10$
480$ $IF preid == -1$
481$ $ERROR$
482$ $FORMAT("unexpected preid.")$
483$ $END$
484$ $END$
485$ $check_srpw_mo = check_srpw_mo & 0x0f$
486$ $SRPW_AREA_LIMIT[check_srpw_mo] = MO.LIMITADDR[preid]$
487$ $SRPW_AREA_SIZE[check_srpw_mo] = SRPW_AREA_LIMIT[check_srpw_mo] - SRPW_AREA_BASE[check_srpw_mo]$
488$ $SRPW_AREA_LIMIT_MO[check_srpw_mo] = preid$
489$ $check_srpw_mo = check_srpw_mo + 1$
490$ $END$
491$ $IF (check_rosdata_mo & 0x10) == 0x10$
492$ $IF preid == -1$
493$ $ERROR$
494$ $FORMAT("unexpected preid.")$
495$ $END$
496$ $END$
497$ $check_rosdata_mo = check_rosdata_mo & 0x0f$
498$ $ROSDATA_AREA_LIMIT[check_rosdata_mo] = MO.LIMITADDR[preid]$
499$ $ROSDATA_AREA_SIZE[check_rosdata_mo] = ROSDATA_AREA_LIMIT[check_rosdata_mo] - ROSDATA_AREA_BASE[check_rosdata_mo]$
500$ $ROSDATA_AREA_LIMIT_MO[check_rosdata_mo] = preid$
501$ $check_rosdata_mo = check_rosdata_mo + 1$
502$ $END$
503$
504$ $
505$ $ エラーチェック
506$ $
507$ $FOREACH id LIST_SHARED_MO$
508$ $IF DEBUG_OPT_TF$
509$ $WARNING$
510$ $id$$NL$
511$ $SHARED_AREA_MO[id]$$NL$
512$ $SHARED_AREA_LIMIT_MO[id]$$NL$
513$ $FORMAT("0x%x", SHARED_AREA_BASE[id])$$NL$
514$ $FORMAT("0x%x", SHARED_AREA_LIMIT[id])$$NL$
515$ $FORMAT("0x%x", SHARED_AREA_SIZE[id])$$NL$
516$ $END$
517$ $END$
518$ $IF ((MO.MEMATR[SHARED_AREA_MO[id]] & TA_SDATA) == TA_SDATA)$
519$ $IF LENGTH(SHARED_SDATA.BASE)$
520$ $ERROR$
521$ $FORMAT("unexpected mematr: %d, %x", id, MO.MEMATR[SHARED_AREA_MO[id]])$
522$ $END$
523$ $ELSE$
524$ $SHARED_SDATA.BASE = SHARED_AREA_BASE[id]$
525$ $SHARED_SDATA.LIMIT = SHARED_AREA_LIMIT[id]$
526$ $SHARED_SDATA.SIZE = SHARED_AREA_SIZE[id]$
527$ $SHARED_SDATA.BASE_MO = SHARED_AREA_MO[id]$
528$ $SHARED_SDATA.LIMIT_MO = SHARED_AREA_LIMIT_MO[id]$
529$ $END$
530$ $ELSE$
531$ $IF LENGTH(SHARED_DATA.BASE)$
532$ $ERROR$
533$ $FORMAT("unexpected mematr: %d, %x", id, MO.MEMATR[SHARED_AREA_MO[id]])$
534$ $END$
535$ $ELSE$
536$ $SHARED_DATA.BASE = SHARED_AREA_BASE[id]$
537$ $SHARED_DATA.LIMIT = SHARED_AREA_LIMIT[id]$
538$ $SHARED_DATA.SIZE = SHARED_AREA_SIZE[id]$
539$ $SHARED_DATA.BASE_MO = SHARED_AREA_MO[id]$
540$ $SHARED_DATA.LIMIT_MO = SHARED_AREA_LIMIT_MO[id]$
541$ $END$
542$ $END$
543$ $END$
544$
545$ $FOREACH id LIST_SRPW_MO$
546$ $IF DEBUG_OPT_TF$
547$ $WARNING$
548$ $id$$NL$
549$ $SRPW_AREA_MO[id]$$NL$
550$ $SRPW_AREA_LIMIT_MO[id]$$NL$
551$ $FORMAT("0x%x", SRPW_AREA_BASE[id])$$NL$
552$ $FORMAT("0x%x", SRPW_AREA_LIMIT[id])$$NL$
553$ $FORMAT("0x%x", SRPW_AREA_SIZE[id])$$NL$
554$ $END$
555$ $END$
556$ $IF ((MO.MEMATR[SRPW_AREA_MO[id]] & TA_SDATA) == TA_SDATA)$
557$ $IF LENGTH(SRPW_SDATA.BASE)$
558$ $ERROR$
559$ $FORMAT("unexpected mematr: %d, %x", id, MO.MEMATR[SRPW_AREA_MO[id]])$
560$ $END$
561$ $ELSE$
562$ $SRPW_SDATA.BASE = SRPW_AREA_BASE[id]$
563$ $SRPW_SDATA.LIMIT = SRPW_AREA_LIMIT[id]$
564$ $SRPW_SDATA.SIZE = SRPW_AREA_SIZE[id]$
565$ $SRPW_SDATA.BASE_MO = SRPW_AREA_MO[id]$
566$ $SRPW_SDATA.LIMIT_MO = SRPW_AREA_LIMIT_MO[id]$
567$ $END$
568$ $ELSE$
569$ $IF LENGTH(SRPW_DATA.BASE)$
570$ $ERROR$
571$ $FORMAT("unexpected mematr: %d, %x", SRPW_AREA_MO[0], MO.MEMATR[SRPW_AREA_MO[id]])$
572$ $FORMAT("unexpected mematr: %d, %x", SRPW_AREA_MO[id], MO.MEMATR[SRPW_AREA_MO[id]])$
573$ $END$
574$ $ELSE$
575$ $SRPW_DATA.BASE = SRPW_AREA_BASE[id]$
576$ $SRPW_DATA.LIMIT = SRPW_AREA_LIMIT[id]$
577$ $SRPW_DATA.SIZE = SRPW_AREA_SIZE[id]$
578$ $SRPW_DATA.BASE_MO = SRPW_AREA_MO[id]$
579$ $SRPW_DATA.LIMIT_MO = SRPW_AREA_LIMIT_MO[id]$
580$ $END$
581$ $END$
582$ $END$
583$
584$ $FOREACH id LIST_ROSDATA_MO$
585$ $IF DEBUG_OPT_TF$
586$ $WARNING$
587$ $id$$NL$
588$ $ROSDATA_AREA_MO[id]$$NL$
589$ $ROSDATA_AREA_LIMIT_MO[id]$$NL$
590$ $FORMAT("0x%x", ROSDATA_AREA_BASE[id])$$NL$
591$ $FORMAT("0x%x", ROSDATA_AREA_LIMIT[id])$$NL$
592$ $FORMAT("0x%x", ROSDATA_AREA_SIZE[id])$$NL$
593$ $END$
594$ $END$
595$ $IF (id == 0)$
596$ $IF ((MO.MEMATR[ROSDATA_AREA_MO[id]] & TA_SDATA) != TA_SDATA)$
597$ $ERROR$
598$ $FORMAT("unexpected mematr: %d, %x", id, MO.MEMATR[ROSDATA_AREA_MO[id]])$
599$ $END$
600$ $ELSE$
601$ $ROSDATA.BASE = ROSDATA_AREA_BASE[id]$
602$ $ROSDATA.LIMIT = ROSDATA_AREA_LIMIT[id]$
603$ $ROSDATA.SIZE = ROSDATA_AREA_SIZE[id]$
604$ $ROSDATA.BASE_MO = ROSDATA_AREA_MO[id]$
605$ $ROSDATA.LIMIT_MO = ROSDATA_AREA_LIMIT_MO[id]$
606$ $END$
607$ $ELSE$
608$ $ERROR$
609$ $FORMAT("unexpected id: %d", id)$
610$ $END$
611$ $END$
612$ $END$
613$
614$ $
615$ $ data_sharedのé…
616ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’求める
617$ $
618$ $SHARED_DATA.REALSIZE = SEARCH_ARM_MPU_SIZE(SHARED_DATA.SIZE + SHARED_SDATA.SIZE)$
619$ $SHARED_DATA.REALBASE = SEARCH_ARM_MPU_ALIGN(SDATA_BASE, SHARED_DATA.REALSIZE)$
620$ $IF DEBUG_OPT_TF$
621$ $WARNING$
622$ $FORMAT("data_shared: base[0x%x], size[0x%x]", SHARED_DATA.REALBASE, SHARED_DATA.REALSIZE)$$NL$
623$ $END$
624$ $END$
625$
626$ $
627$ $ sdataに関するサイズを求める
628$ $
629$ $SDATA.SIZE = SDATA_LIMIT - SDATA_BASE$
630$ $SDATA.MISC_SIZE = SDATA.SIZE - (SHARED_SDATA.SIZE + ROSDATA.SIZE)$
631$
632$ $SDATA.SIZE_TO_ROSDATA = ROSDATA.BASE - SDATA_BASE$
633$
634$ $SDATA.SIZE_TO_SSHARED = SHARED_SDATA.BASE - SDATA_BASE$
635$ $SDATA.SIZE_TO_SSHARED = SDATA.SIZE_TO_SSHARED - ROSDATA.SIZE$
636$
637$ $IF LENGTH(SRPW_SDATA.SIZE)$
638$ $SDATA.MISC_SIZE = SDATA.MISC_SIZE - SRPW_SDATA.SIZE$
639$ $SDATA.SIZE_TO_SSRPW = SRPW_SDATA.BASE - SDATA_BASE$
640$ $SDATA.SIZE_TO_ROSDATA = SDATA.SIZE_TO_ROSDATA - SRPW_SDATA.SIZE$
641$ $SDATA.SIZE_TO_SSHARED = SDATA.SIZE_TO_SSHARED - SRPW_SDATA.SIZE$
642$ $END$
643$ $IF DEBUG_OPT_TF$
644$ $WARNING$
645$ $FORMAT("sdata_misc: size[0x%x]", SDATA.MISC_SIZE)$$NL$
646$ $END$
647$ $END$
648$
649$ $
650$ $ dataに関するサイズを求める
651$ $
652$ $DATA.SIZE_TO_SHARED = SHARED_DATA.BASE - SDATA_LIMIT$
653$
654$ $IF LENGTH(SRPW_DATA.SIZE)$
655$ $DATA.SIZE_TO_SRPW = SRPW_DATA.BASE - SDATA_LIMIT$
656$ $DATA.SIZE_TO_SHARED = DATA.SIZE_TO_SHARED - SRPW_DATA.SIZE$
657$ $END$
658$ $IF DEBUG_OPT_TF$
659$ $WARNING$
660$ $FORMAT("sdata_misc: size[0x%x]", SDATA.MISC_SIZE)$$NL$
661$ $END$
662$ $END$
663$
664$ $ $ERROR$
665$ $ "implemented to here.\n"
666$ $ $END$
667$ $ $DIE()$
668$
669$
670$ $
671$ $ é…
672ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定するセクションに対する処理
673$ $ é…
674ç½®æ›ãˆå¯¾è±¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³: 必
675ずあるかどうか
676$ $ srpw_data_all: 0
677$ $ srpw_sdata_all: 0
678$ $ rosdata_shared: 1
679$ $ sdata_shared: 1
680$ $ data_shared: 1
681$ $
682$ $check_shared_mo = 0$
683$ $preid = -1$
684$ $limit_align_flag = 1$
685$ $FOREACH moid MO_START_LIST$
686$ $ // メモリオブジェクトのå…
687ˆé ­ã‚’パス2時点での順にチェック
688$ $IF MO.LINKER[moid]$
689$ $IF DEBUG_OPT_TF$
690$ $WARNING$
691$ $FORMAT("check mo %d: SEFLAG=0x%x", moid, MO.SEFLAG[moid])$$NL$
692$ $END$
693$ $END$
694$ $IF !LENGTH(SDATA.REALBASE) && ((MO.MEMATR[moid] & TA_SDATA) == TA_SDATA)$
695$ $ // ショートデータセクションのå…
696ˆé ­
697$ $ $MO.REALBASE[moid] = SDATA_BASE + ROSDATA.SIZE$
698$ $MO.REALBASE[moid] = SHARED_DATA.REALBASE + SHARED_DATA.REALSIZE$
699$ $SDATA.REALBASE = MO.REALBASE[moid]$
700$ $ $IF LENGTH(SRPW_DATA.SIZE)$
701$ $ $MO.REALBASE[moid] = MO.REALBASE[moid] + SRPW_DATA.SIZE$
702$ $ $END$
703$ $ $IF LENGTH(SRPW_SDATA.SIZE)$
704$ $ $MO.REALBASE[moid] = MO.REALBASE[moid] + SRPW_SDATA.SIZE$
705$ $ $END$
706$ $MO.COMMENT[moid] = "sdata_top"$
707$ $SDATA.START_MO = moid$
708$ $MO.SEFLAG[moid] = MO.SEFLAG[moid] & ~0x400$
709$ $IF DEBUG_OPT_TF$
710$ $WARNING$
711$ $FORMAT("sdata_top[%d]=0x%x", moid, SDATA.REALBASE)$$NL$
712$ $END$
713$ $END$
714$ $END$
715$ $IF LENGTH(SRPW_SDATA.BASE) && (moid == SRPW_SDATA.BASE_MO)$
716$ $ // srpw_sdata_allのå…
717ˆé ­
718$ $MO.REALBASE[moid] = SDATA.REALBASE + SDATA.MISC_SIZE + ROSDATA.SIZE$
719$ $ $MO.REALBASE[moid] = SDATA_BASE$
720$ $ $IF LENGTH(SRPW_DATA.SIZE)$
721$ $ $MO.REALBASE[moid] = MO.REALBASE[moid] + SRPW_DATA.SIZE$
722$ $ $END$
723$ $MO.COMMENT[moid] = "srpw_sdata_top"$
724$ $IF DEBUG_OPT_TF$
725$ $WARNING$
726$ $FORMAT("srpw_sdata_top[%d]=0x%x", moid, MO.REALBASE[moid])$$NL$
727$ $END$
728$ $END$
729$ $END$
730$ $IF LENGTH(SRPW_SDATA.LIMIT_MO) && (preid == SRPW_SDATA.LIMIT_MO)
731$ && (moid != ROSDATA.BASE_MO)$
732$ $ // srpw_sdata_allとrosdataの間にメモリオブジェクトがある場合
733$ $MO.REALBASE[moid] = SDATA.REALBASE + SDATA.SIZE_TO_SSRPW$
734$ $ $IF LENGTH(SRPW_DATA.SIZE)$
735$ $ $MO.REALBASE[moid] = MO.REALBASE[moid] + SRPW_DATA.SIZE$
736$ $ $END$
737$ $MO.COMMENT[moid] = "srpw_sdata_limit"$
738$ $IF DEBUG_OPT_TF$
739$ $WARNING$
740$ $FORMAT("%s[%d]=0x%x", MO.COMMENT[moid], moid, MO.REALBASE[moid])$$NL$
741$ $END$
742$ $END$
743$ $END$
744$ $IF (moid == ROSDATA.BASE_MO)$
745$ $ // rosdataのå…
746ˆé ­
747$ $MO.REALBASE[moid] = SDATA.REALBASE + SDATA.MISC_SIZE$
748$ $ $MO.REALBASE[moid] = SDATA_BASE$
749$ $ $IF LENGTH(SRPW_DATA.SIZE)$
750$ $ $MO.REALBASE[moid] = MO.REALBASE[moid] + SRPW_DATA.SIZE$
751$ $ $END$
752$ $ $IF LENGTH(SRPW_SDATA.SIZE)$
753$ $ $MO.REALBASE[moid] = MO.REALBASE[moid] + SRPW_SDATA.SIZE$
754$ $ $END$
755$ $MO.COMMENT[moid] = "rosdata_shared_top"$
756$ $IF DEBUG_OPT_TF$
757$ $WARNING$
758$ $FORMAT("%s[%d]=0x%x", MO.COMMENT[moid], moid, MO.REALBASE[moid])$$NL$
759$ $END$
760$ $END$
761$ $END$
762$ $ $IF (preid == ROSDATA.LIMIT_MO) && (preid != SDATA_LIMIT_MO)$
763$ $IF (preid == ROSDATA.LIMIT_MO) && (moid != SHARED_SDATA.BASE_MO)$
764$ $ // rosdataとsdata_sharedの間にsdataがある場合
765$ $MO.REALBASE[moid] = SDATA.REALBASE + SDATA.SIZE_TO_ROSDATA$
766$ $ $MO.REALBASE[moid] = MO.BASEADDR[moid]$
767$ $ $IF LENGTH(SRPW_DATA.SIZE)$
768$ $ $MO.REALBASE[moid] = MO.REALBASE[moid] + SRPW_DATA.SIZE$
769$ $ $END$
770$ $MO.COMMENT[moid] = "rosdata_shared_limit"$
771$ $IF DEBUG_OPT_TF$
772$ $WARNING$
773$ $FORMAT("%s[%d]=0x%x", MO.COMMENT[moid], moid, MO.REALBASE[moid])$$NL$
774$ $END$
775$ $END$
776$ $END$
777$ $IF (moid == SHARED_SDATA.BASE_MO)$
778$ $ // sdata_sharedのå…
779ˆé ­
780$ $MO.REALBASE[moid] = SHARED_DATA.REALBASE + SHARED_DATA.SIZE$
781$ $MO.COMMENT[moid] = "sdata_shared_top"$
782$ $MO.SEFLAG[moid] = MO.SEFLAG[moid] | 0x400$
783$ $IF DEBUG_OPT_TF$
784$ $WARNING$
785$ $FORMAT("%s[%d]=0x%x", MO.COMMENT[moid], moid, MO.REALBASE[moid])$$NL$
786$ $END$
787$ $END$
788$ $END$
789$ $IF (preid == SHARED_SDATA.LIMIT_MO)$
790$ $ // sdata_sharedの終端はマスクベース方式なのでサイズの倍数にアライン
791$ $at_mo_order = FIND(MO_ORDER, preid)$
792$ $check_flag = 1$
793$ $WHILE check_flag$
794$ $IF LENGTH(AT(MO_ORDER, at_mo_order))$
795$ $IF DEBUG_OPT_TF$
796$ $WARNING$
797$ $FORMAT("check: %d, 0x%x", AT(MO_ORDER, at_mo_order), +MO.SEFLAG[AT(MO_ORDER, at_mo_order)])$$NL$
798$ $END$
799$ $END$
800$ $IF (MO.SEFLAG[AT(MO_ORDER, at_mo_order)] & 0x20) == 0x20$
801$ $IF DEBUG_OPT_TF$
802$ $WARNING$
803$ $FORMAT("hit: %d, 0x%x", AT(MO_ORDER, at_mo_order), +MO.SEFLAG[AT(MO_ORDER, at_mo_order)])$$NL$
804$ $END$
805$ $END$
806$ $MO.REALALIGN[AT(MO_ORDER, at_mo_order)] = SHARED_DATA.REALSIZE$
807$ $check_flag = 0$
808$ $END$
809$ $ELSE$
810$ $ERROR$
811$ $FORMAT("shared sdata does not have limit label")$$NL$
812$ $END$
813$ $check_flag = 0$
814$ $END$
815$ $at_mo_order = at_mo_order + 1$
816$ $END$
817$ $IF (preid != SDATA_LIMIT_MO)$
818$ $ // sdata_sharedの下にsdataがある場合
819$ $MO.REALBASE[moid] = SDATA.REALBASE + SDATA.SIZE_TO_SSHARED$
820$ $MO.COMMENT[moid] = "sdata_shared_limit"$
821$ $END$
822$ $END$
823$ $IF (preid == SDATA_LIMIT_MO)$
824$ $ // sdataの終端の場合
825$ $MO.REALBASE[moid] = SDATA.REALBASE + (SDATA.SIZE - SHARED_SDATA.SIZE)$
826$ $IF LENGTH(SRPW_DATA.SIZE)$
827$ $MO.REALBASE[moid] = MO.REALBASE[moid] + SRPW_DATA.SIZE$
828$ $END$
829$ $DATA.REALBASE = MO.REALBASE[moid]$
830$ $ $MO.REALBASE[moid] = SDATA_LIMIT + SHARED_DATA.SIZE$
831$ $ $IF LENGTH(SRPW_DATA.SIZE)$
832$ $ $MO.REALBASE[moid] = MO.REALBASE[moid] + SRPW_DATA.SIZE$
833$ $ $END$
834$ $IF DEBUG_OPT_TF$
835$ $WARNING$
836$ $FORMAT("%d: 0x%x, sdata_limit", moid, MO.REALBASE[moid])$$NL$
837$ $END$
838$ $END$
839$ $MO.COMMENT[moid] = "sdata_limit"$
840$ $DATA.START_MO = moid$
841$ $END$
842$ $IF LENGTH(SRPW_DATA.BASE_MO) && (moid == SRPW_DATA.BASE_MO)$
843$ $ // srpwのå…
844ˆé ­ã®å ´åˆ
845$ $MO.REALBASE[moid] = SDATA.REALBASE + (SDATA.SIZE - SHARED_SDATA.SIZE)$
846$ $ $MO.REALBASE[moid] = SDATA_BASE$
847$ $IF DEBUG_OPT_TF$
848$ $WARNING$
849$ $FORMAT("%d: 0x%x", moid, MO.REALBASE[moid])$$NL$
850$ $END$
851$ $END$
852$ $MO.COMMENT[moid] = "srpw_data_top"$
853$ $END$
854$ $IF LENGTH(SRPW_DATA.LIMIT_MO) && (preid == SRPW_DATA.LIMIT_MO)
855$ && (moid != SHARED_DATA.BASE_MO)$
856$ $ // srpw_data_allとdata_sharedの間にdataがある場合
857$ $ $MO.REALBASE[moid] = MO.BASEADDR[moid] + SHARED_DATA.SIZE$
858$ $MO.REALBASE[moid] = DATA.REALBASE + DATA.SIZE_TO_SRPW$
859$ $MO.COMMENT[moid] = "srpw_data_limit"$
860$ $IF DEBUG_OPT_TF$
861$ $WARNING$
862$ $FORMAT("%s[%d]=0x%x", MO.COMMENT[moid], moid, MO.REALBASE[moid])$$NL$
863$ $END$
864$ $END$
865$ $END$
866$ $IF (moid == SHARED_DATA.BASE_MO)$
867$ $MO.REALBASE[moid] = SHARED_DATA.REALBASE$
868$ $ $MO.REALBASE[moid] = SDATA_LIMIT$
869$ $ $IF LENGTH(SRPW_DATA.SIZE)$
870$ $ $MO.REALBASE[moid] = MO.REALBASE[moid] + SRPW_DATA.SIZE$
871$ $ $END$
872$ $IF DEBUG_OPT_TF$
873$ $WARNING$
874$ $FORMAT("%d: 0x%x", moid, MO.REALBASE[moid])$$NL$
875$ $END$
876$ $END$
877$ $MO.COMMENT[moid] = "data_shared_top"$
878$ $END$
879$ $IF (preid == SHARED_DATA.LIMIT_MO)$
880$ $ // data_sharedの下にdataがある場合
881$ $MO.REALBASE[moid] = DATA.REALBASE + DATA.SIZE_TO_SHARED$
882$ $ $MO.REALBASE[moid] = MO.BASEADDR[moid]$
883$ $limit_align_flag = 0$
884$ $MO.COMMENT[moid] = "data_shared_limit"$
885$ $IF DEBUG_OPT_TF$
886$ $WARNING$
887$ $FORMAT("%d: 0x%x, not required dummy section", moid, MO.REALBASE[moid])$$NL$
888$ $END$
889$ $END$
890$ $END$
891$ $END$
892$
893$ $preid = moid$
894$ $END$
895$ $IF limit_align_flag$
896$ $ $IF LENGTH(SRPW_DATA.LIMIT)$
897$ $ $REG.LIMIT_ALIGN[MO.MEMREG[moid]] = SRPW_DATA.LIMIT$
898$ $ $ELSE$
899$ $ $REG.LIMIT_ALIGN[MO.MEMREG[moid]] = SHARED_DATA.LIMIT$
900$ $ $END$
901$ $REG.LIMIT_ALIGN[STANDARD_RAM] = DATA.REALBASE + DATA.SIZE_TO_SHARED$
902$ $IF DEBUG_OPT_TF$
903$ $WARNING$
904$ $FORMAT("%s: 0x%x, required dummy section", REG.REGNAME[STANDARD_RAM], REG.LIMIT_ALIGN[STANDARD_RAM])$$NL$
905$ $END$
906$ $END$
907$ $END$
908
909$
910$ å…
911±æœ‰ãƒªãƒ¼ãƒ‰ãƒ©ã‚¤ãƒˆé ˜åŸŸ / å…
912±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライト領域(sdata) / rosdata_shared領域
913$ の情
914報取得
915$
916$check_shared_mo = 0x00$
917$check_srpw_mo = 0x00$
918$check_rosdata_mo = 0x00$
919$check_sdata_mo = 0x00$
920$LIST_SHARED_MO = {}$
921$LIST_SRPW_MO = {}$
922$LIST_ROSDATA_MO = {}$
923$preid = -1$
924$FOREACH moid MO_START_LIST$
925$ // メモリオブジェクトのå…
926ˆé ­ã‚’パス2時点での順にチェック
927 $IF LENGTH(FIND(MO_MPROTECT_LIST, moid))$
928$ // メモリ保護単位のå…
929ˆé ­ã®å ´åˆ
930 $IF (MO.ACPTN1[moid] == TACP_SHARED) && (MO.ACPTN2[moid] == TACP_SHARED)$
931 $IF ((check_shared_mo & 0x10) != 0x10)$
932$ // å…
933±æœ‰ãƒªãƒ¼ãƒ‰ãƒ©ã‚¤ãƒˆé ˜åŸŸã®å…
934ˆé ­ã®å ´åˆ
935 $SHARED_AREA_BASE[check_shared_mo] = MO.BASEADDR[moid]$
936 $SHARED_AREA_MO[check_shared_mo] = moid$
937 $LIST_SHARED_MO = APPEND(LIST_SHARED_MO, check_shared_mo)$
938 $check_shared_mo = check_shared_mo | 0x10$
939 $END$
940 $ELIF (check_shared_mo & 0x10) == 0x10$
941$ // å…
942±æœ‰ãƒªãƒ¼ãƒ‰ãƒ©ã‚¤ãƒˆé ˜åŸŸã®çµ‚端の場合
943 $IF preid == -1$
944 $ERROR$
945 $FORMAT("unexpected preid.")$
946 $END$
947 $END$
948 $check_shared_mo = check_shared_mo & 0x0f$
949 $SHARED_AREA_LIMIT[check_shared_mo] = MO.LIMITADDR[preid]$
950 $SHARED_AREA_SIZE[check_shared_mo] = SHARED_AREA_LIMIT[check_shared_mo] - SHARED_AREA_BASE[check_shared_mo]$
951 $SHARED_AREA_LIMIT_MO[check_shared_mo] = preid$
952 $check_shared_mo = check_shared_mo + 1$
953 $END$
954
955 $END$
956
957 $preid = moid$
958$END$
959$IF (check_shared_mo & 0x10) == 0x10$
960 $IF preid == -1$
961 $ERROR$
962 $FORMAT("unexpected preid.")$
963 $END$
964 $END$
965 $check_shared_mo = check_shared_mo & 0x0f$
966 $SHARED_AREA_LIMIT[check_shared_mo] = MO.LIMITADDR[preid]$
967 $SHARED_AREA_LIMIT_MO[check_shared_mo] = preid$
968 $SHARED_AREA_SIZE[check_shared_mo] = SHARED_AREA_LIMIT[check_shared_mo] - SHARED_AREA_BASE[check_shared_mo]$
969 $check_shared_mo = check_shared_mo + 1$
970$END$
971$
972$ エラーチェック
973$
974$FOREACH id LIST_SHARED_MO$
975 $IF DEBUG_OPT_TF$
976 $WARNING$
977 $id$$NL$
978 $SHARED_AREA_MO[id]$$NL$
979 $SHARED_AREA_LIMIT_MO[id]$$NL$
980 $FORMAT("0x%x", SHARED_AREA_BASE[id])$$NL$
981 $FORMAT("0x%x", SHARED_AREA_LIMIT[id])$$NL$
982 $FORMAT("0x%x", SHARED_AREA_SIZE[id])$$NL$
983 $END$
984 $END$
985 $IF ((MO.MEMATR[SHARED_AREA_MO[id]] & TA_SDATA) == TA_SDATA)$
986 $IF LENGTH(SHARED_DATA.BASE)$
987 $ERROR$
988 $FORMAT("unexpected mematr: %d, %x", id, MO.MEMATR[SHARED_AREA_MO[id]])$
989 $END$
990 $ELSE$
991 $SHARED_DATA.BASE = SHARED_AREA_BASE[id]$
992 $SHARED_DATA.LIMIT = SHARED_AREA_LIMIT[id]$
993 $SHARED_DATA.SIZE = SHARED_AREA_SIZE[id]$
994 $SHARED_DATA.BASE_MO = SHARED_AREA_MO[id]$
995 $SHARED_DATA.LIMIT_MO = SHARED_AREA_LIMIT_MO[id]$
996 $END$
997 $ELSE$
998 $ERROR$
999 $FORMAT("unexpected mematr: %d, %x", id, MO.MEMATR[SHARED_AREA_MO[id]])$
1000 $END$
1001 $END$
1002$END$
1003
1004$
1005$ data_sharedのé…
1006ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’求める
1007$
1008$SHARED_DATA.REALSIZE = SEARCH_ARM_MPU_SIZE(SHARED_DATA.SIZE)$
1009$SHARED_DATA.REALBASE = SEARCH_ARM_MPU_ALIGN(SHARED_DATA.BASE, SHARED_DATA.REALSIZE)$
1010$IF DEBUG_OPT_TF$
1011 $WARNING$
1012 $FORMAT("data_shared: base[0x%x], size[0x%x]", SHARED_DATA.REALBASE, SHARED_DATA.REALSIZE)$$NL$
1013 $END$
1014$END$
1015
1016$
1017$ é…
1018ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定するセクションに対する処理
1019$ é…
1020ç½®æ›ãˆå¯¾è±¡ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³: 必
1021ずあるかどうか
1022$ srpw_data_all: 0
1023$ srpw_sdata_all: 0
1024$ rosdata_shared: 1
1025$ sdata_shared: 1
1026$ data_shared: 1
1027$
1028$check_shared_mo = 0$
1029$preid = -1$
1030$limit_align_flag = 1$
1031$FOREACH moid MO_START_LIST$
1032$ // メモリオブジェクトのå…
1033ˆé ­ã‚’パス2時点での順にチェック
1034 $IF MO.LINKER[moid]$
1035 $IF DEBUG_OPT_TF$
1036 $WARNING$
1037 $FORMAT("check mo %d: SEFLAG=0x%x", moid, MO.SEFLAG[moid])$$NL$
1038 $END$
1039 $END$
1040 $IF (moid == SHARED_DATA.BASE_MO)$
1041$ // data_sharedのå…
1042ˆé ­
1043 $MO.REALBASE[moid] = SHARED_DATA.REALBASE$
1044 $MO.COMMENT[moid] = "data_shared_top"$
1045 $IF DEBUG_OPT_TF$
1046 $WARNING$
1047 $FORMAT("%s[%d]=0x%x", MO.COMMENT[moid], moid, MO.REALBASE[moid])$$NL$
1048 $END$
1049 $END$
1050 $END$
1051 $IF (preid == SHARED_DATA.LIMIT_MO)$
1052$ // data_sharedの終端はマスクベース方式なのでサイズの倍数にアライン
1053 $at_mo_order = FIND(MO_ORDER, preid)$
1054 $check_flag = 1$
1055 $WHILE check_flag$
1056 $IF LENGTH(AT(MO_ORDER, at_mo_order))$
1057 $IF DEBUG_OPT_TF$
1058 $WARNING$
1059 $FORMAT("check: %d, 0x%x", AT(MO_ORDER, at_mo_order), +MO.SEFLAG[AT(MO_ORDER, at_mo_order)])$$NL$
1060 $END$
1061 $END$
1062 $IF (MO.SEFLAG[AT(MO_ORDER, at_mo_order)] & 0x20) == 0x20$
1063 $IF DEBUG_OPT_TF$
1064 $WARNING$
1065 $FORMAT("hit: %d, 0x%x", AT(MO_ORDER, at_mo_order), +MO.SEFLAG[AT(MO_ORDER, at_mo_order)])$$NL$
1066 $END$
1067 $END$
1068 $MO.REALALIGN[AT(MO_ORDER, at_mo_order)] = SHARED_DATA.REALSIZE$
1069 $check_flag = 0$
1070 $END$
1071 $ELSE$
1072 $ERROR$
1073 $FORMAT("shared data does not have limit label")$$NL$
1074 $END$
1075 $check_flag = 0$
1076 $END$
1077 $at_mo_order = at_mo_order + 1$
1078 $END$
1079 $END$
1080 $END$
1081
1082 $preid = moid$
1083$END$
1084$IF (preid == SHARED_DATA.LIMIT_MO)$
1085$ // data_sharedの終端はマスクベース方式なのでサイズの倍数にアライン
1086 $at_mo_order = FIND(MO_ORDER, preid)$
1087 $check_flag = 1$
1088 $WHILE check_flag$
1089 $IF LENGTH(AT(MO_ORDER, at_mo_order))$
1090 $IF DEBUG_OPT_TF$
1091 $WARNING$
1092 $FORMAT("check: %d, 0x%x", AT(MO_ORDER, at_mo_order), +MO.SEFLAG[AT(MO_ORDER, at_mo_order)])$$NL$
1093 $END$
1094 $END$
1095 $IF (MO.SEFLAG[AT(MO_ORDER, at_mo_order)] & 0x20) == 0x20$
1096 $IF DEBUG_OPT_TF$
1097 $WARNING$
1098 $FORMAT("hit: %d, 0x%x", AT(MO_ORDER, at_mo_order), +MO.SEFLAG[AT(MO_ORDER, at_mo_order)])$$NL$
1099 $END$
1100 $END$
1101 $MO.REALALIGN[AT(MO_ORDER, at_mo_order)] = SHARED_DATA.REALSIZE$
1102 $check_flag = 0$
1103 $END$
1104 $ELSE$
1105 $ERROR$
1106 $FORMAT("shared data does not have limit label")$$NL$
1107 $END$
1108 $check_flag = 0$
1109 $END$
1110 $at_mo_order = at_mo_order + 1$
1111 $END$
1112$END$
1113
1114
1115
1116$
1117$ arch/v850_ghs/ldscript.tfのターゲット依存部
1118$
1119
1120$FUNCTION GENERATE_PROVIDE$
1121 provide(_hardware_init_hook = 0);$NL$
1122 provide(_software_init_hook = 0);$NL$
1123 provide(_software_term_hook = 0);$NL$
1124 provide(_bsssecinib_table = 0);$NL$
1125 provide(_tnum_bsssec = 0);$NL$
1126 provide(_datasecinib_table = 0);$NL$
1127 provide(_tnum_datasec = 0);$NL$
1128 $NL$
1129
1130 $IF LENGTH(OSAP.ID_LIST)$
1131 $FOREACH domid OSAP.ID_LIST$
1132 $IF !OSAP.TRUSTED[domid]$
1133$ RX領域(専用)
1134 provide(___start_text_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
1135 provide(___limit_text_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
1136$ R領域(専用)
1137 provide(___start_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
1138 provide(___limit_sram_$OSAP.LABEL[domid]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
1139$ RWX領域(専用)
1140 provide(___start_ram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
1141 provide(___limit_ram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
1142 provide(___start_sram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
1143 provide(___limit_sram_$OSAP.LABEL[domid]$ = 0xfffffff0);$NL$
1144$ å…
1145±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト
1146 provide($FORMAT("___start_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
1147 provide($FORMAT("___limit_ram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
1148 provide($FORMAT("___start_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
1149 provide($FORMAT("___limit_sram_%s_%x_%x", OSAP.LABEL[domid], +DEFAULT_ACPTN[domid], +TACP_SHARED)$ = 0xfffffff0);$NL$
1150$ provide($FORMAT("___start_ram_%s_srpw", OSAP.LABEL[domid])$ = 0xfffffff0);$NL$
1151$ provide($FORMAT("___limit_ram_%s_srpw", OSAP.LABEL[domid])$ = 0xfffffff0);$NL$
1152$ provide($FORMAT("___start_sram_%s_srpw", OSAP.LABEL[domid])$ = 0xfffffff0);$NL$
1153$ provide($FORMAT("___limit_sram_%s_srpw", OSAP.LABEL[domid])$ = 0xfffffff0);$NL$
1154 $END$
1155 $END$
1156 $NL$
1157 $END$$NL$
1158
1159$ å…
1160±æœ‰é ˜åŸŸ
1161 provide(___start_text_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
1162 provide(___limit_text_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
1163 provide(___start_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
1164 provide(___limit_sram_$OSAP.LABEL[TDOM_NONE]$_$FORMAT("%x", MEMATR_ROSDATA & ~TA_MEMINI)$ = 0xfffffff0);$NL$
1165 provide(___start_ram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
1166 provide(___limit_ram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
1167 provide(___start_sram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
1168 provide(___limit_sram_$OSAP.LABEL[TDOM_NONE]$ = 0xfffffff0);$NL$
1169$ å…
1170±æœ‰ãƒªãƒ¼ãƒ‰å°‚用ライト領域å…
1171¨ä½“
1172 provide(___start_srpw_all = 0xfffffff0);$NL$
1173 provide(___limit_srpw_all = 0xfffffff0);$NL$
1174 provide(___start_ssrpw_all = 0xfffffff0);$NL$
1175 provide(___limit_ssrpw_all = 0xfffffff0);$NL$
1176 $NL$
1177$END$
1178
1179
1180$ $FUNCTION TARGET_PROVIDE_GP$
1181$FUNCTION GENERATE_GP_LABEL$
1182 $TAB$$TAB$__gp = . + 32K;$NL$
1183$END$
1184
1185$TOPPERS_ATTMOD = TOPPERS_ATTSEC + 1$
1186$TOPPERS_MPFAREA = TOPPERS_ATTSEC + 2$
1187
1188$INCLUDE "v850_ghs/ldscript.tf"$
1189
1190$FOREACH moid MO_ORDER$
1191 $IF MO.LINKER[moid]$
1192$ // セクションの開始記述の生成
1193 $IF (MO.SEFLAG[moid] & 0x01) != 0$
1194$ // å…
1195±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライト領域のå…
1196¨ä½“の開始番地
1197 $IF (MO.SEFLAG[moid] & 0x100) != 0$
1198$ // 最初に更新された値が有効となる
1199 $IF !LENGTH(SRPW.BASE)$
1200 $SRPW.BASE = MO.BASEADDR[moid]$
1201 $IF DEBUG_OPT_TF$
1202 $WARNING$
1203 $FORMAT("hit: %d, 0x%x", moid, +MO.SEFLAG[moid])$$NL$
1204 $END$
1205 $END$
1206 $END$
1207 $ELIF MO.ACPTN1[moid] == 0 && MO.ACPTN2[moid] == TACP_SHARED
1208 && (MO.MEMATR[moid] & TA_SDATA) != 0$
1209$ // 最初に更新された値が有効となる
1210 $IF !LENGTH(SRPW.BASE)$
1211 $SRPW.BASE = MO.BASEADDR[moid]$
1212 $END$
1213 $END$
1214 $END$
1215
1216$ // å…
1217±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライト領域のå…
1218¨ä½“の終了番地
1219 $IF (MO.SEFLAG[moid] & 0x200) != 0$
1220 $IF !LENGTH(SRPW.BASE)$
1221 $ERROR$
1222 "start_srpw label is not found"
1223 $END$
1224 $END$
1225$ // 最後に更新された値が有効となる
1226$ $SRPW.LIMIT = MO.LIMITADDR[moid]$
1227 $SRPW.LIMIT = LIMIT_SYMBOL(MO.MLABEL[moid])$
1228 $IF DEBUG_OPT_TF$
1229 $WARNING$
1230 $FORMAT("hit end: %d, 0x%x", moid, SRPW.LIMIT)$$NL$
1231 $END$
1232 $END$
1233 $ELIF MO.ACPTN1[moid] == 0 && MO.ACPTN2[moid] == TACP_SHARED
1234 && (MO.MEMATR[moid] & TA_SDATA) != 0$
1235$ // 最後に更新された値が有効となる
1236$ $SRPW.LIMIT = MO.LIMITADDR[moid]$
1237 $SRPW.LIMIT = LIMIT_SYMBOL(MO.MLABEL[moid])$
1238 $IF DEBUG_OPT_TF$
1239 $WARNING$
1240 $FORMAT("hit end: %d, 0x%x", moid, SRPW.LIMIT)$$NL$
1241 $END$
1242 $END$
1243 $END$
1244
1245 $END$
1246$END$
1247
1248$IF DEBUG_OPT_TF$
1249 $WARNING$
1250 $FORMAT("srpw area: 0x%x, 0x%x", SRPW.BASE, SRPW.LIMIT)$$NL$
1251 $END$
1252$END$
1253
1254$
1255$ å…
1256±æœ‰é ˜åŸŸã®åˆæœŸåŒ–ブロックを生成
1257$
1258$FILE "kernel_mem3.c"$
1259
1260$TNUM_SHARED_REGION = 3$
1261const uint32 tnum_shared_mem = $TNUM_SHARED_REGION * 2$;$NL$
1262uint8 * const shared_meminib_table[$TNUM_SHARED_REGION * 2$] = {$NL$
1263$shared_info = SYMBOL("shared_meminib_table")$
1264$ RX領域(å…
1265±æœ‰ï¼‰
1266$start_label = PEEK(shared_info, 4)$
1267$limit_label = PEEK(shared_info + 4, 4)$
1268$TAB$((uint8 *)&__start_text_$OSAP.LABEL[TDOM_NONE]$),$TAB$/* iregion 2 */$NL$
1269$TAB$((uint8 *)&__limit_text_$OSAP.LABEL[TDOM_NONE]$),$TAB$/* iregion 2 */$NL$
1270$ $TAB$$FORMAT("( (uint8 *)0x%x )", start_label)$,$TAB$/* iregion 2 : $FORMAT("0x%x", start_label)$ */$NL$
1271$ $TAB$$FORMAT("( (uint8 *)0x%x )", limit_label)$,$TAB$/* iregion 2 : $FORMAT("0x%x", limit_label)$ */$NL$
1272
1273$ RX領域(å…
1274±æœ‰ã‚·ãƒ§ãƒ¼ãƒˆãƒ‡ãƒ¼ã‚¿ï¼Œå…
1275±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトのå…
1276¨ä½“)
1277$ rosdata_shared
1278$ srpw_data_all
1279$start_label = PEEK(shared_info + 8, 4)$
1280$limit_label = PEEK(shared_info + 12, 4)$
1281$IF LENGTH(SRPW.BASE) && LENGTH(SRPW.LIMIT)$
1282 $TAB$((uint8 *)$FORMAT("0x%x", SRPW.BASE)$),$TAB$/* iregion 3 */$NL$
1283 $TAB$((uint8 *)$FORMAT("0x%x", SRPW.LIMIT)$),$TAB$/* iregion 3 */$NL$
1284$ELSE$
1285 $TAB$((uint8 *)NULL),$TAB$/* iregion 3 */$NL$
1286 $TAB$((uint8 *)NULL),$TAB$/* iregion 3 */$NL$
1287$END$
1288
1289$ RWX領域(å…
1290±æœ‰ã‚·ãƒ§ãƒ¼ãƒˆãƒ‡ãƒ¼ã‚¿ï¼Œå…
1291±æœ‰ãƒ‡ãƒ¼ã‚¿ï¼‰
1292$ //sdata_sharedのå…
1293ˆé ­ã‹ã‚‰data_sharedの終端(dataのå…
1294ˆé ­ï¼‰ã¾ã§
1295$ data_sharedのå…
1296ˆé ­ã‹ã‚‰sdata_sharedの終端(dataのå…
1297ˆé ­ï¼‰ã¾ã§
1298$start_label = PEEK(shared_info + 16, 4)$
1299$limit_label = PEEK(shared_info + 20, 4)$
1300$ $start_label = SHARED_SDATA.BASE$
1301$ $IF LENGTH(SRPW_DATA.SIZE)$
1302$ $start_label = start_label + SRPW_DATA.SIZE$
1303$ $END$
1304$ $limit_label = MO.REALBASE[DATA.START_MO]$
1305$start_label = SHARED_DATA.REALBASE$
1306$limit_label = (SHARED_DATA.REALSIZE - 1) & ~0x0f$
1307$TAB$$FORMAT("( (uint8 *)0x%x )", start_label)$,$TAB$/* dregion 5 : $FORMAT("0x%x", start_label)$ */$NL$
1308$TAB$$FORMAT("( (uint8 *)0x%x )", limit_label)$,$TAB$/* dregion 5 : $FORMAT("0x%x", limit_label)$ */$NL$
1309
1310};$NL$
1311$NL$
1312
1313
Note: See TracBrowser for help on using the repository browser.