source: asp3_wo_tecs/trunk/target/macosx_xcode/target.tf@ 302

Last change on this file since 302 was 302, checked in by ertl-honda, 7 years ago

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

File size: 4.7 KB
Line 
1$
2$ パス2のターゲット依存テンプレート(Mac OS X用)
3$
4$ $Id: target.tf 405 2015-08-02 21:56:53Z ertl-hiro $
5$
6
7$
8$ 使用できる割込み番号とそれに対応する割込みハンドラ番号
9$
10$ 割込み番号と割込みハンドラ番号は,シグナル番号に一致させる.1〜31の
11$ シグナル番号の内
12,SIGKILL(=9),SIGSTOP(=17),SIGUSR2(=31)以
13$ 外が使用できる.
14$
15$INTNO_VALID = { 1, 2, ..., 8; 10, 11, ..., 16; 18, 19, ..., 30 }$
16$INHNO_VALID = INTNO_VALID$
17$EXCNO_VALID = INTNO_VALID$
18
19$
20$ CFG_INTで使用できる割込み番号と割込み優å…
21ˆåº¦
22$
23$ 割込み優å…
24ˆåº¦ã¯ï¼Œ-1〜-7が使用できる.-7はNMIと扱う.
25$
26$INTPRI_CFGINT_VALID = { -1, -2, ..., -7 }$
27
28$
29$ スタック領域の確保関数
30$
31$ Intelプロセッサでは,スタックポインタを16バイト境界にアラインさせる
32$ 必
33要がある.
34$
35$FUNCTION ALLOC_STACK$
36 static STK_T $ARGV[1]$[COUNT_STK_T($ARGV[2]$)]
37 $SPC$__attribute__((aligned(16)));$NL$
38 $RESULT = FORMAT("ROUND_STK_T(%1%)", ARGV[2])$
39$END$
40
41$
42$ 標準テンプレートファイルのインクルード
43$
44$INCLUDE "kernel/kernel.tf"$
45
46$
47$ ターゲット依存の定義の生成
48$
49$FILE "kernel_cfg.c"$
50
51/*$NL$
52$SPC$* Target-dependent Definitions (Mac OS X)$NL$
53$SPC$*/$NL$
54$NL$
55
56$
57$ マスクできないシグナルとカーネルが使うシグナルに関する設定
58$
59$ SIGKILL(マスク不可)
60$ SIGSTOP(マスク不可)
61$ SIGUSR2(カーネルが利用)
62$
63$INT.INTPRI[SIGKILL] = -7$
64$INT.INTPRI[SIGSTOP] = -7$
65$INT.INTPRI[SIGUSR2] = -7$
66
67$
68$ CFG_INTのターゲット依存のエラーチェック
69$
70$FOREACH intno INT.ORDER_LIST$
71 $IF (INT.INTATR[intno] & TA_EDGE) == 0$
72 $ERROR INT.TEXT_LINE[intno]$E_RSATR:$SPC$
73 $FORMAT("Level trigger is not supported for %1% `%2%\' in %3%",
74 "intno", INT.INTNO[intno], "CFG_INT")$
75 $END$
76 $END$
77$END$
78
79$
80$ CPU例外ハンドラに関する処理
81$
82$FOREACH excno EXC.ORDER_LIST$
83$ // 割込みハンドラとの重複チェック
84 $IF LENGTH(INH.INHNO[excno])$
85 $ERROR EXC.TEXT_LINE[excno]$E_OBJ:$SPC$
86 $FORMAT(_("%1% `%2%\' in %3% is duplicated with %4% `%5%\'"),
87 "excno", EXC.EXCNO[excno], "DEF_EXC",
88 "inhno", INH.INHNO[excno])$
89 $END$
90 $END$
91
92$ // CPU例外ハンドラを登録したシグナルに関する設定
93 $IF LENGTH(INTNO[excno])$
94 $INT.INTPRI[INTNO[excno]] = -7$
95 $END$
96$END$
97
98$
99$ デバッグ用にマスクしないシグナルに関する設定
100$
101$ SIGINT(デバッグ用)
102$ SIGBUS(デバッグ用)
103$ SIGSEGV(デバッグ用)
104$
105$IF !LENGTH(INT.INTPRI[SIGINT])$
106 $INT.INTPRI[SIGINT] = -7$
107$END$
108$IF !LENGTH(INT.INTPRI[SIGBUS])$
109 $INT.INTPRI[SIGBUS] = -7$
110$END$
111$IF !LENGTH(INT.INTPRI[SIGSEGV])$
112 $INT.INTPRI[SIGSEGV] = -7$
113$END$
114
115$
116$ 割込みハンドラの初期化に必
117要な情
118å ±
119$
120
121$
122$ 定義する割込みハンドラの数
123$
124#define TNUM_DEF_INHNO $LENGTH(INH.ORDER_LIST)$$NL$
125const uint_t _kernel_tnum_def_inhno = TNUM_DEF_INHNO;$NL$
126$NL$
127$FOREACH inhno INH.ORDER_LIST$
128 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
129 INTHDR_ENTRY($INH.INHNO[inhno]$, $INH.INTHDR[inhno]$,$SPC$
130 $INT.INTPRI[INTNO[inhno]]$)$NL$
131 $END$
132$END$
133$NL$
134
135$
136$ 割込みハンドラ初期化テーブル
137$
138$IF LENGTH(INH.ORDER_LIST)$
139 const INHINIB _kernel_inhinib_table[TNUM_DEF_INHNO] = {$NL$
140 $JOINEACH inhno INH.ORDER_LIST ",\n"$
141 $TAB${$SPC$
142$ // 割込みハンドラ番号,割込みハンドラ属性
143 ($INH.INHNO[inhno]$), ($INH.INHATR[inhno]$),$SPC$
144
145$ // 割込みハンドラの出å…
146¥å£å‡¦ç†ã®ç•ªåœ°
147 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
148 (FP)(INT_ENTRY($INH.INHNO[inhno]$, $INH.INTHDR[inhno]$))
149 $ELSE$
150 (FP)($INH.INTHDR[inhno]$)
151 $END$,$SPC$
152
153$ // 割込み優å…
154ˆåº¦
155 ($INT.INTPRI[INTNO[INH.INHNO[inhno]]]$)$SPC$
156 }$END$$NL$
157 };$NL$
158$ELSE$
159 TOPPERS_EMPTY_LABEL(const INHINIB, _kernel_inhinib_table);$NL$
160$END$
161$NL$
162
163$
164$ 割込み優å…
165ˆåº¦æ¯Žã®ãã‚Œä»¥ä¸‹ã®å‰²è¾¼ã¿è¦æ±‚をマスクするための情
166報のテーブル
167$
168const sigset_t _kernel_sigmask_table[8] = {$NL$
169$FOREACH intpri { 0, -1, ..., -6 }$
170 $intmask = 0$
171 $FOREACH intno { 1, 2, ..., 31 }$
172 $IF ALT(INT.INTPRI[intno], 0) >= intpri$
173 $intmask = intmask | (1 << (intno - 1))$
174 $END$
175 $END$
176 $TAB$UINT32_C($FORMAT("0x%08x", intmask)$),$NL$
177$END$
178$TAB$UINT32_C($FORMAT("0x%08x", intmask)$)$NL$
179};$NL$
180
181$
182$ 割込み要求禁止フラグ実現のための変数の初期値
183$
184$sigmask_disint_init = 0$
185$FOREACH intno INT.ORDER_LIST$
186 $IF (INT.INTATR[intno] & TA_ENAINT) == 0$
187 $sigmask_disint_init = sigmask_disint_init
188 | (1 << (INT.INTNO[intno] - 1))$
189 $END$
190$END$
191$NL$
192const sigset_t _kernel_sigmask_disint_init =
193 UINT32_C($FORMAT("0x%08x", sigmask_disint_init)$);$NL$
Note: See TracBrowser for help on using the repository browser.