source: atk2-sc3-1.4.0-ntisr/arch/v850_ccrh/prc_meminib.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: 12.8 KB
Line 
1$
2$ TOPPERS ATK2
3$ Toyohashi Open Platform for Embedded Real-Time Systems
4$ Automotive Kernel Version 2
5$
6$ Copyright (C) 2014-2015 by Center for Embedded Computing Systems
7$ Graduate School of Information Science, Nagoya Univ., JAPAN
8$
9$ 上記著作権者
10は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
11$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12$ 変・再é…
13å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
14$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16$ スコード中に含まれていること.
17$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18$ 用できる形で再é…
19å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
20å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
21$ 者
22マニュアルなど)に,上記の著作権表示,この利用条件および下記
23$ の無保証規定を掲載すること.
24$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
25$ 用できない形で再é…
26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
27$ と.
28$ (a) 再é…
29å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
30マニュアルなど)に,上記の著
31$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
32$ (b) 再é…
33å¸ƒã®å½¢æ…
34‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
35$ 報告すること.
36$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
37$ 害からも,上記著作権者
38およびTOPPERSプロジェクトをå…
39è²¬ã™ã‚‹ã“と.
40$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
41$ 由に基づく請求からも,上記著作権者
42およびTOPPERSプロジェクトを
43$ å…
44è²¬ã™ã‚‹ã“と.
45$
46$ 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
47$ 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
48$ はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
49$ 用する者
50に対して,AUTOSARパートナーになることを求めている.
51$
52$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者
53お
54$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
55$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
56$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
57$ の責任を負わない.
58$
59$ $Id: prc_meminib.tf 189 2015-06-26 01:54:57Z t_ishikawa $
60$
61
62$
63$ MOの読み込み
64$
65$INCLUDE "cfg2_out.tf"$
66
67$ =====================================================================
68$ kernel_mem.cのå…
69±é€šéƒ¨åˆ†ã®ç”Ÿæˆ
70$ =====================================================================
71
72$FILE "kernel_mem.c"$
73
74$ =====================================================================
75$ シンボルと仮メモリオブジェクト初期化ブロックの読込みと前処理
76$ =====================================================================
77
78$
79$ シンボルと仮メモリオブジェクト初期化ブロックの読込み
80$
81$ MO.BASEADDR[moid]:メモリオブジェクトのå…
82ˆé ­ç•ªåœ°
83$ MO.LIMITADDR[moid]:メモリオブジェクトの上限番地
84$ MO.POFFSET[moid]:物理アドレスとのオフセット
85$ MO_MEMTOP_LIST:サイズが0でないメモリオブジェクトのリスト
86
87$OMIT_STANDARD_MEMINIB = 1$
88$IF OMIT_STANDARD_MEMINIB$
89 $MO_MEMTOP_LIST = {}$
90 $memtop_table = SYMBOL("memtop_table")$
91 $offset = 0$
92 $FOREACH moid MO_START_LIST$
93 $IF MO.LINKER[moid]$
94 $next = AT(MO_START_LIST, (FIND(MO_START_LIST, moid) + 1))$
95 $IF LENGTH(next) && !EQ(next, "")$
96 $last = FIND(MO_ORDER, next) - 1$
97 $ELSE$
98 $last = LENGTH(MO_ORDER) - 1$
99 $END$
100 $TRACE(MO.SECTION[moid])$
101 $FOREACH moid2 RANGE(FIND(MO_ORDER, moid), last)$
102 $moid2 = AT(MO_ORDER, moid2)$
103 $TRACE(MO.SECTION[moid2])$
104 $IF !LENGTH(MO.BASEADDR[moid])$
105 $MO.BASEADDR[moid] = START_MO_SYMBOL(moid2)$
106 $IF !EQ(MO.ILABEL[moid2], "")$
107 $MO.IBASEADDR[moid] = START_SYMBOL(MO.SECTION[moid2])$
108 $END$
109 $END$
110 $IF LENGTH(LIMIT_MO_SYMBOL(moid2))$
111 $MO.LIMITADDR[moid] = LIMIT_MO_SYMBOL(moid2)$
112 $END$
113 $END$
114 $IF !LENGTH(MO.BASEADDR[moid])$
115 $IF LENGTH(MO.LIMITADDR[moid])$
116 $ERROR$conflict MO BASE and LIMIT$END$
117 $END$
118 $MO.BASEADDR[moid] = 0xffffffff$
119 $MO.LIMITADDR[moid] = 0xffffffff$
120 $END$
121 $IF LENGTH(MO.BASEADDR[moid])$
122 $IF !LENGTH(MO.LIMITADDR[moid])$
123 $ERROR$conflict MO BASE and LIMIT$END$
124 $END$
125 $END$
126 $MO.POFFSET[moid] = 0$
127 $ELSE$
128 $MO.BASEADDR[moid] = PEEK(memtop_table + offset, sizeof_void_ptr)$
129 $offset = offset + sizeof_void_ptr$
130 $MO.LIMITADDR[moid] = (MO.BASEADDR[moid] + MO.SIZE[moid]) & ((1 << sizeof_void_ptr * 8) - 1)$
131 $IF LENGTH(MO.PADDR[moid])$
132 $MO.POFFSET[moid] = MO.PADDR[moid] - MO.BASEADDR[moid]$
133 $ELSE$
134 $MO.POFFSET[moid] = 0$
135 $END$
136 $END$
137
138 $IF MO.BASEADDR[moid] != MO.LIMITADDR[moid]$
139 $IF MO.BASEADDR[moid] < MO.LIMITADDR[moid]
140 || MO.LIMITADDR[moid] == 0$
141 $MO_MEMTOP_LIST = APPEND(MO_MEMTOP_LIST, moid)$
142 $ELIF MO.TYPE[moid] == TOPPERS_ATTMEM$
143 $ERROR MO.TEXT_LINE[moid]$
144 $FORMAT(_("%1% `%2%\' is too large"),
145 "size", MO.SIZE[moid])$
146 $END$
147 $ELSE$
148 $ERROR MO.TEXT_LINE[moid]$
149 $FORMAT(_("illegal memory object size"))$$NL$
150 $FORMAT("0x%x", MO.BASEADDR[moid])$$NL$
151 $FORMAT("0x%x", MO.LIMITADDR[moid])$
152 $END$
153 $END$
154 $END$
155 $END$
156$END$
157
158$ =====================================================================
159$ メモリオブジェクト初期化ブロックの生成
160$ =====================================================================
161
162$FUNCTION GENERATE_MEMINIB_TABLE$
163$ // メモリオブジェクト初期化ブロックに出力するエントリの決定
164$
165$ // tnum_meminib:メモリオブジェクト初期化ブロックに出力するエントリ数
166$ // genzero:アドレス0に対応するエントリを出力する
167 $tnum_meminib = 0$
168 $prev = 0$
169 $TRACE(MO_MEMTOP_ORDER)$
170 $FOREACH moid MO_MEMTOP_ORDER$
171 $IF !prev && MO.BASEADDR[moid] != 0$
172 $genzero = 1$
173 $tnum_meminib = tnum_meminib + 1$
174 $END$
175 $IF LENGTH(MO.SUPPRESSLIMIT[moid])$
176 $tnum_meminib = tnum_meminib + 1$
177 $ELSE$
178 $tnum_meminib = tnum_meminib + 2$
179 $END$
180 $prev = moid$
181 $END$
182
183$ // tsize_meminibの妥当性チェック
184 $IF tsize_meminib < tnum_meminib$
185 $ERROR$$FORMAT(_("illegal memory object initialization block size"))$$END$
186 $END$
187
188$ // tnum_meminibの生成
189 const uint32 tnum_meminib = $tnum_meminib$U;$NL$
190 $NL$
191
192$ // memtop_tableの生成
193 void *const memtop_table[$tsize_meminib$] = {$NL$
194 $IF LENGTH(genzero)$
195 $TAB$0,$NL$
196 $END$
197 $JOINEACH moid MO_MEMTOP_ORDER ",\n"$
198 $IF MO.LINKER[moid]$
199 $TAB$$FORMAT("(void *)0x%x", MO.BASEADDR[moid])$
200 $SPC$/* #__s$MO.SECTION[moid]$ */
201 $IF !LENGTH(MO.SUPPRESSLIMIT[moid])$
202 ,$NL$$TAB$$FORMAT("(void *)0x%x", MO.LIMITADDR[moid])$
203 $SPC$/* #__e$MO.SECTION[ALT(MO.MERGELAST[moid],moid)]$ */
204 $END$
205 $ELSE$
206 $TAB$(void *)($MO.BASE[moid]$)
207 $SPC$/* $FORMAT("%x", MO.BASEADDR[moid])$ */
208 $IF !LENGTH(MO.SUPPRESSLIMIT[moid])$
209 ,$NL$$TAB$(void *)(((uint8 *)($MO.BASE[moid]$)) + ($MO.SIZE[moid]$))
210 $SPC$/* $FORMAT("%x", MO.LIMITADDR[moid])$ */
211 $END$
212 $END$
213 $END$
214 $IF tnum_meminib < tsize_meminib$
215 $FOREACH i RANGE(tnum_meminib + 1, tsize_meminib)$
216 ,$NL$$TAB$NULL
217 $END$
218 $END$$NL$
219 };$NL$
220 $NL$
221
222$ // meminib_tableの生成
223 const MEMINIB meminib_table[$tsize_meminib$] = {$NL$
224 $IF LENGTH(genzero)$
225 $TAB${ TA_NULL, TACP_KERNEL, TACP_KERNEL, TACP_KERNEL },$NL$
226 $END$
227 $JOINEACH moid MO_MEMTOP_ORDER ",\n"$
228 $TAB${
229 $IF MO.TYPE[moid] == TOPPERS_USTACK$
230 $SPC$TOPPERS_USTACK|($MO.MEMATR[moid]$),
231 $ELSE$
232 $IF MO.TYPE[moid] == TOPPERS_ATTMEM$
233 $SPC$TOPPERS_ATTMEM|($FORMAT("0x%xU", +MO.MEMATR[moid])$),
234 $ELSE$
235 $SPC$TOPPERS_ATTSEC|($FORMAT("0x%xU", +MO.MEMATR[moid])$),
236 $END$
237 $END$
238 $SPC$$MO.ACPTN_R[moid]$,
239 $SPC$$MO.ACPTN_W[moid]$,
240 $SPC$$MO.ACPTN_X[moid]$
241 $SPC$}
242 $IF !LENGTH(MO.SUPPRESSLIMIT[moid])$
243 ,$NL$$TAB${ TA_NULL, TACP_KERNEL, TACP_KERNEL, TACP_KERNEL }
244 $END$
245 $END$
246 $IF tnum_meminib < tsize_meminib$
247 $FOREACH i RANGE(tnum_meminib + 1, tsize_meminib)$
248 ,$NL$$TAB${ 0U, 0U, 0U, 0U }
249 $END$
250 $END$$NL$
251 };$NL$
252 $NL$
253
254$
255$ dataセクション初期化ブロックの生成
256$
257 $IF !OMIT_IDATA && LENGTH(DATASEC_LIST) && !LENGTH(DATASEC_LIST_OPTIMIZED)$
258$ // サイズが0でないdataセクションのリスト(MO_DATASEC_LIST)を作成
259$ // パス3で作成していない場合には,ここで作成する.
260 $MO_DATASEC_LIST = {}$
261 $FOREACH moid DATASEC_LIST$
262 $IF MO.BASEADDR[moid] != MO.LIMITADDR[moid]$
263 $MO_DATASEC_LIST = APPEND(MO_DATASEC_LIST, moid)$
264 $END$
265 $END$
266 $END$
267
268 $IF OMIT_STANDARD_DATASECINIB$
269 /*$NL$
270 $SPC$* Data Section Management Functions$NL$
271 $SPC$*/$NL$
272 $NL$
273
274$ // dataセクションの数
275 #define TNUM_DATASEC $IF !OMIT_IDATA$$LENGTH(MO_DATASEC_LIST)$U$ELSE$0$END$$NL$
276 #define TNUM_DATASEC_TBL $IF !OMIT_IDATA$$LENGTH(DATASEC_LIST)$U$ELSE$0$END$$NL$
277 $NL$
278
279 $IF ISFUNCTION("DEFINE_CONST_VAR")$
280 $DEFINE_CONST_VAR("const uint32", "tnum_datasec")$ = TNUM_DATASEC;$NL$
281 $ELSE$
282 const uint32 tnum_datasec = TNUM_DATASEC;$NL$
283 $END$
284 $NL$
285
286 $IF !OMIT_IDATA && LENGTH(DATASEC_LIST)$
287 $IF ISFUNCTION("DEFINE_CONST_VAR")$
288 $DEFINE_CONST_VAR("const DATASECINIB", "datasecinib_table[TNUM_DATASEC_TBL]")$ = {
289 $ELSE$
290 const DATASECINIB datasecinib_table[TNUM_DATASEC_TBL] = {
291 $END$
292 $IF LENGTH(MO_DATASEC_LIST)$
293 $NL$
294 $JOINEACH moid MO_DATASEC_LIST ",\n"$
295 $IF LENGTH(START_MO_SYMBOL(moid))$
296 $TAB${ $FORMAT("(void *)0x%xU, (void *)0x%xU, (void *)0x%xU", MO.BASEADDR[moid], MO.LIMITADDR[moid],
297 MO.IBASEADDR[moid])$ }
298 $ELSE$
299 $TAB${ 0U, 0U, 0U }
300 $END$
301 $SPC$ /* #__s$MO.SECTION[moid]$.R, &__e$MO.SECTION[moid]$.R,
302 &__s$MO.SECTION[moid]$ */
303 $END$$NL$
304 $ELSE$
305 { 0U, 0U, 0U }
306 $END$
307 };$NL$
308 $ELSE$
309 TOPPERS_EMPTY_LABEL(const DATASECINIB, datasecinib_table);$NL$
310 $END$$NL$
311 $END$
312
313$
314$ bssセクション初期化ブロックの生成
315$
316 $IF LENGTH(BSSSEC_LIST) && !LENGTH(BSSSEC_LIST_OPTIMIZED)$
317$ // サイズが0でないbssセクションのリスト(MO_BSSSEC_LIST)を作成
318 $MO_BSSSEC_LIST = {}$
319 $FOREACH moid BSSSEC_LIST$
320 $IF MO.BASEADDR[moid] != MO.LIMITADDR[moid]$
321 $MO_BSSSEC_LIST = APPEND(MO_BSSSEC_LIST, moid)$
322 $END$
323 $END$
324 $END$
325
326 $IF OMIT_STANDARD_BSSSECINIB$
327 /*$NL$
328 $SPC$* BSS Section Management Functions$NL$
329 $SPC$*/$NL$
330 $NL$
331
332 $IF LENGTH(BSSSEC_LIST)$
333$ // bssセクションの数
334 const uint32 tnum_bsssec = $LENGTH(MO_BSSSEC_LIST)$U;$NL$
335 $NL$
336
337$ // bssセクション初期化ブロック
338 const BSSSECINIB bsssecinib_table[$LENGTH(BSSSEC_LIST)$] = {
339 $IF LENGTH(MO_BSSSEC_LIST)$
340 $NL$
341 $JOINEACH moid MO_BSSSEC_LIST ",\n"$
342 $IF LENGTH(START_MO_SYMBOL(moid))$
343 $TAB${ $FORMAT("(void *)0x%xU, (void *)0x%xU", MO.BASEADDR[moid], MO.LIMITADDR[moid])$ }
344 $ELSE$
345 $TAB${ 0, 0 }
346 $END$
347 $SPC$ /* #__s$MO.SECTION[moid]$, #__e$MO.SECTION[moid]$ */
348 $END$$NL$
349 $ELSE$
350 { 0, 0 }
351 $END$
352 };$NL$
353 $ELSE$
354 const uint32 tnum_bsssec = 0U;$NL$
355 TOPPERS_EMPTY_LABEL(const BSSSECINIB, bsssecinib_table);$NL$
356 $END$$NL$
357 $END$
358
359$END$
360
361$OMIT_STANDARD_DATASECINIB = 1$
362$OMIT_STANDARD_BSSSECINIB = 1$
363
Note: See TracBrowser for help on using the repository browser.