Changeset 95 for ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_support.S
- Timestamp:
- Jun 2, 2015, 3:39:53 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ssp_qb_r5f100le_cs/trunk/arch/arm_m_gcc/prc_support.S
-
Property svn:mime-type
set to
text/plain; charset=shift_jis
r93 r95 7 7 * Copyright (C) 2010 by Meika Sugimoto 8 8 * 9 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 10 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 11 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 14 * XR[hÉÜÜêÄ¢é±ÆD 15 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 16 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gip 18 * Ò}j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 20 * ̳ÛØKèðfÚ·é±ÆD 21 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 22 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 23 * ÆD 24 * (a) Äzzɺ¤hL 25 gipÒ}j 26 AÈÇjÉCãLÌ 27 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 28 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 29 * ñ·é±ÆD 30 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 31 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 32 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 33 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 34 * ÆÓ·é±ÆD 9 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 10 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 11 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 14 * スコード中に含まれていること. 15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 16 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 17 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 18 * の無保証規定を掲載すること. 19 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 20 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 21 * と. 22 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 23 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 24 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 25 * 報告すること. 26 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 27 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 28 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 29 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 30 * 免責すること. 35 31 * 36 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨37 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI38 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF39 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»40 * ÌÓCðíÈ¢D32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 * の責任を負わない. 41 37 * 42 38 */ 43 39 44 40 /* 45 * vZbT˶W 46 [ AZu¾êiARM-Mpj 41 * プロセッサ依存モジュール アセンブリ言語部(ARM-M用) 47 42 */ 48 43 49 44 #define TOPPERS_MACRO_ONLY 50 #define UINT_C(val) (val) /* uint_t ^Ìèðìé}N*/51 #define ULONG_C(val) (val) /* ulong_t ^Ìèðìé}N*/52 #define CAST(type, val) (val) /* ^LXgðs¤}N*/45 #define UINT_C(val) (val) /* uint_t型の定数を作るマクロ */ 46 #define ULONG_C(val) (val) /* ulong_t型の定数を作るマクロ */ 47 #define CAST(type, val) (val) /* 型キャストを行うマクロ */ 53 48 54 49 #include "kernel_impl.h" … … 59 54 60 55 /* 61 * OQÆ56 * 外部参照 62 57 */ 63 58 .global intnest 64 59 65 60 /* 66 * CPU áOGg61 * CPU例外エントリ 67 62 * 68 * ÝGgÆÌàeͯ¾ªCOÌíÞªÙÈé½ßC69 * ª¯Ä¢éD63 * 割込みエントリと処理の内容は同等だが,ログの種類が異なるため, 64 * 分けている. 70 65 */ 71 66 .align 2 … … 76 71 exc_entry: 77 72 /* 78 * áO/ݪ¶·éÆC¶ÉANeBuÈX^bNÉXN79 * b`WX^ªÛ¶³êéD80 * ±ÌàeÉÁ¦ÄCCPUáOnhÖÌîñƵÄCbasepri ÌlÆC81 * EXC_RETURN ÌîñðÁ¦ÄÛ¶·éDbasepriÌlÍCCPUáO©çÌ82 * ^[ÉÝDæx}XNÌlð³Éß·½ßÉàp¢çêéD73 * 例外/割込みが発生すると,発生時にアクティブなスタックにスクラ 74 * ッチレジスタ等が保存される. 75 * この内容に加えて,CPU例外ハンドラへの情報として,basepri の値と, 76 * EXC_RETURNの情報を加えて保存する.basepriの値は,CPU例外からの 77 * リターン時に割込み優先度マスクの値を元に戻すためにも用いられる. 83 78 * 84 79 * ----------- … … 107 102 108 103 /* 109 * ݶÌÝDæx}XNðX^bNÉÛ¶·é½ßæ¾110 */ 111 mrs r2, basepri /* baepri Ìlðæ¾*/112 push {r2} /* ݶÌÝDæx}XNðÏÞ*/113 push {lr} /* EXC_RETURN ðÏÞ*/114 mov r0, sp /* CPU áOnhÖÌøÆÈé*/115 116 ldr r1 , =lock_flag /* CPU bNtOðÛ¶*/104 * 割込み発生時の割込み優先度マスクをスタックに保存するため取得 105 */ 106 mrs r2, basepri /* baepriの値を取得 */ 107 push {r2} /* 割込み発生時の割込み優先度マスクを積む */ 108 push {lr} /* EXC_RETURN を積む */ 109 mov r0, sp /* CPU例外ハンドラへの引数となる */ 110 111 ldr r1 , =lock_flag /* CPUロックフラグを保存 */ 117 112 ldr r1 , [r1] 118 113 push {r1} 119 114 120 /* ÝlXgÌÁZ*/115 /* 割込みネスト数の加算 */ 121 116 ldr r1 , =intnest 122 117 ldr r3 , [r1] … … 125 120 126 121 /* 127 * ¤Ê122 * 共通処理 128 123 */ 129 124 exc_entry_2: 130 mrs r3, ipsr /* nhAhXðæ¾*/125 mrs r3, ipsr /* ハンドラアドレスを取得 */ 131 126 ldr r1, =_kernel_exc_tbl 132 127 ldr r2, [r1, r3, lsl #2] … … 134 129 #ifdef LOG_EXC_ENTER 135 130 push {r0, r2, r3} 136 mov r0, r3 /* áOÔðp[^É*/137 bl log_exc_enter /* log_exc_enter ðÄÑo·*/131 mov r0, r3 /* 例外番号をパラメータに */ 132 bl log_exc_enter /* log_exc_enterを呼び出す */ 138 133 pop {r0, r2, r3} 139 134 #endif /* LOG_EXC_ENTER */ 140 135 141 136 #ifdef LOG_EXC_LEAVE 142 push { r3 } /* áOÔðX^bNÖ*/137 push { r3 } /* 例外番号をスタックへ */ 143 138 #endif /* LOG_EXC_LEAVE */ 144 139 145 140 /* 146 * CPU áOnhÌÄÑoµ141 * CPU例外ハンドラの呼び出し 147 142 */ 148 143 blx r2 149 144 150 /* CPU bNtOð³Éß·*/145 /* CPUロックフラグを元に戻す */ 151 146 pop {r0} 152 147 ldr r1 , =lock_flag … … 154 149 155 150 #ifdef LOG_EXC_LEAVE 156 pop { r0 } /* áOÔðøÉ*/157 bl log_exc_leave /* log_exc_leave ðÄÑo·*/151 pop { r0 } /* 例外番号を引数に */ 152 bl log_exc_leave /* log_exc_leaveを呼び出す */ 158 153 #endif /* LOG_EXC_LEAVE */ 159 154 … … 162 157 163 158 /* 164 * ÝGg159 * 割込みエントリ 165 160 */ 166 161 .align 2 … … 171 166 int_entry: 172 167 /* 173 * ݶÌÝDæx}XNðX^bNÉÛ¶·é½ßæ¾174 */ 175 mrs r2, basepri /* baepri Ìlðæ¾*/176 push {r2} /* ݶÌÝDæx}XNðÏÞ*/177 push {lr} /* EXC_RETURN ðÏÞ*/178 mov r0, sp /* ¢è`Ìݪ¶µ½êÌîñÆ·é*/179 180 /* 181 * ¤Ê168 * 割込み発生時の割込み優先度マスクをスタックに保存するため取得 169 */ 170 mrs r2, basepri /* baepriの値を取得 */ 171 push {r2} /* 割込み発生時の割込み優先度マスクを積む */ 172 push {lr} /* EXC_RETURN を積む */ 173 mov r0, sp /* 未定義の割込みが発生した場合の情報とする */ 174 175 /* 176 * 共通処理 182 177 */ 183 178 int_entry_2: 184 /* ÝlXgÌÁZ*/179 /* 割込みネスト数の加算 */ 185 180 ldr r1 , =intnest 186 181 ldr r3 , [r1] … … 188 183 str r3 , [r1] 189 184 190 mrs r3, ipsr /* nhAhXðæ¾*/185 mrs r3, ipsr /* ハンドラアドレスを取得 */ 191 186 ldr r1, =_kernel_exc_tbl 192 187 ldr r2, [r1, r3, lsl #2] … … 194 189 #ifdef LOG_INH_ENTER 195 190 push {r0,r2,r3} 196 mov r0, r3 /* ÝÔðp[^É*/197 bl log_inh_enter /* log_inh_enter ðÄÑo·*/191 mov r0, r3 /* 割込み番号をパラメータに */ 192 bl log_inh_enter /* log_inh_enterを呼び出す */ 198 193 pop { r0,r2,r3 } 199 194 #endif /* LOG_INH_ENTER */ 200 195 201 196 #ifdef LOG_INH_LEAVE 202 push { r3 } /* ÝÔðX^bNÖ*/197 push { r3 } /* 割込み番号をスタックへ */ 203 198 #endif /* LOG_INH_LEAVE */ 204 199 205 200 /* 206 * CPU áOnhÌÄÑoµ201 * CPU例外ハンドラの呼び出し 207 202 */ 208 203 blx r2 209 204 210 205 #ifdef LOG_INH_LEAVE 211 pop { r0 } /* ÝÔðøÉ*/212 bl log_inh_leave /* log_inh_leave ðÄÑo·*/206 pop { r0 } /* 割込み番号を引数に */ 207 bl log_inh_leave /* log_inh_leaveを呼び出す */ 213 208 #endif /* LOG_INH_LEAVE */ 214 209 215 210 /* 216 * Ý/áOoû211 * 割込み/例外出口 217 212 * 218 * ret_exc/ret_int ÍCCPUáO/Ýnh©çßÁ½¼ãÉÀs·é219 * [`Å éD213 * ret_exc/ret_intは,CPU例外/割込みハンドラから戻った直後に実行する 214 * ルーチンである. 220 215 */ 221 216 ret_exc: 222 217 ret_int: 223 218 /* 224 * ÝbNóÔÆ·éD±Ì_ÅÍCCPUbNóÔÉÍÈçÈ¢225 * ibasepriÆlock_flagÆsaved_iipmÍXVµÈ¢jD226 * 227 * ÝbNóÔÆ·éÌÍCßèæÌReLXgÌ`FbNÆC228 * ßèæªñ^XNReLXgÅ Á½êÌ^[ðAg~bN229 * És¤½ßÅ éDbsepriðCPUbNÌlÉ·é±ÆÅàAg~b230 * NÈ`FbNÆAÍÂ\Å éªCÝ©ç^[µÄàC231 * basepri ÌÝèàeͳÉßçÈ¢½ßCgp·é±ÆªÅ«È¢D232 * êûCFAULTMASKÍCÝ©çÌ^[ÉæÁÄC'0'ÉN233 * A³êéD219 * 割込みロック状態とする.この時点では,CPUロック状態にはならない 220 * (basepriとlock_flagとsaved_iipmは更新しない). 221 * 222 * 割込みロック状態とするのは,戻り先のコンテキストのチェックと, 223 * 戻り先が非タスクコンテキストであった場合のリターンをアトミック 224 * に行うためである.bsepriをCPUロックの値にすることでもアトミッ 225 * クなチェックと復帰は可能であるが,割込みからリターンしても, 226 * basepri の設定内容は元に戻らないため,使用することができない. 227 * 一方,FAULTMASKは,割込みからのリターン処理によって,'0'にクリ 228 * アされる. 234 229 */ 235 230 cpsid f 236 231 237 232 /* 238 * ßèæÌReLXgÌ»è233 * 戻り先のコンテキストの判定 239 234 * 240 * intnest ª0©Ç¤©Å»f·é235 * intnestが0かどうかで判断する 241 236 * 242 237 */ 243 /* ÝlXg̸Z*/238 /* 割込みネスト数の減算 */ 244 239 ldr r1 , =intnest 245 240 ldr r3 , [r1] … … 251 246 252 247 /* 253 * êiÚÌÝÌoû248 * 一段目の割込みの出口処理 254 249 */ 255 250 ret_int_1: 256 251 /* 257 * ±±ÉÍÝbNóÔiFAULTMASKªZbgj³ê½óÔÅéD258 * Thread [h©çÌ^[Éæè©®IÉÝbNðóÔÉÈéD259 * ÝDæx}XNÍÝOÉóÔÉß·D252 * ここには割込みロック状態(FAULTMASKがセット)された状態で来る. 253 * Threadモードからのリターンにより自動的に割込みロック解除状態になる. 254 * 割込み優先度マスクは割込み前に状態に戻す. 260 255 */ 261 256 pop { r2 } 262 257 pop { r1 } 263 msr basepri, r1 /* ÝDæx}XNðÝOÉóÔÖ*/264 bx r2 /* ^[*/258 msr basepri, r1 /* 割込み優先度マスクを割込み前に状態へ */ 259 bx r2 /* リターン */ 265 260 266 261 ret_int_2: 267 ldr r0, =reqflg /* reqflg ªfalseÈç»ÌÜÜßé*/262 ldr r0, =reqflg /* reqflgがfalseならそのまま戻る */ 268 263 ldr r1, [r0] 269 264 cmp r1 , #0 270 beq ret_int_1 /* false Èçret_int_1Ö*/265 beq ret_int_1 /* falseならret_int_1へ */ 271 266 ret_int_3: 272 mov r1, #0 /* reqflg ðfalseÉ*/267 mov r1, #0 /* reqflgをfalseに */ 273 268 str r1, [r0] 274 269 275 270 /* 276 * CPU bNóÔÉÚs·éD277 * 278 * J[lÌÇàÌÝðÖ~·éæ¤ÉbasepriðÝèµC279 * lock_flag ðXV·éD280 * ±Ì_ÅCPUbNóÔÆ·éÌÍCdispatcherÖªò·éÉ281 * CPU bNóÔÉÈÁÄ¢éKvª é½ßÅ éD282 * ȨC±ÌÌãCThread[hÖÌÚsðsȤ½ßCÝ283 * bNóÔ(FAULTMASKð"1")ÍÛ·éD284 */ 285 ldr r1, =IIPM_LOCK /* CPU bNóÔ*/271 * CPUロック状態に移行する. 272 * 273 * カーネルの管理内の割込みを禁止するようにbasepriを設定し, 274 * lock_flagを更新する. 275 * この時点でCPUロック状態とするのは,dispatcherへ分岐する時に 276 * CPUロック状態になっている必要があるためである. 277 * なお,この処理の後,Threadモードへの移行処理を行なうため,割込み 278 * ロック状態(FAULTMASKを"1")は保持する. 279 */ 280 ldr r1, =IIPM_LOCK /* CPUロック状態 */ 286 281 msr basepri, r1 287 mov r1, #0x01 /* lock_flag ð trueÉ*/282 mov r1, #0x01 /* lock_flag を trueに */ 288 283 ldr r0, =lock_flag 289 284 str r1, [r0] 290 285 291 286 /* 292 * lr ðæèo·D½¾µxfBXpb`ÌÛÉàg¤½ßC293 * X^bN|C^ÍìµÈ¢D287 * lrを取り出す.ただし遅延ディスパッチの際にも使うため, 288 * スタックポインタは操作しない. 294 289 */ 295 290 … … 297 292 298 293 /* 299 * Thread [hÖÚs·éD300 * 301 * dispatcher âcall_texrnðÄÑo·êÍCThread[hÅ éK302 * vª é½ßCPSPX^bNãÉ_~[ÌáOt[ðu¢ÄC303 * [IÉÝnh©ç^[·éD304 * ^[ƯÉFAULTMASKª©®IÉNA³êCJ[lÇOÌ305 * ݪ³êéD294 * Threadモードへ移行する. 295 * 296 * dispatcherやcall_texrnを呼び出す場合は,Threadモードである必 297 * 要があるため,PSPスタック上にダミーの例外フレームを置いて, 298 * 擬似的に割込みハンドラからリターンする. 299 * リターンと同時にFAULTMASKが自動的にクリアされ,カーネル管理外の 300 * 割込みが許可される. 306 301 */ 307 302 ldr r0, =ret_int_4 /* PC */ 308 ldr r1, =EPSR_T /* xPSR(T rbgª'1'Å éKvª é) */309 stmfd sp!, {r0-r1} /* _~[t[ðX^bNãÉÏÞ*/310 sub sp, #(EXC_FRAME_SIZE - (4*2)) /* r0-r3,r12,lr ÌàeÍÝè·éKvªÈ¢*/311 bx r2 /* Thread [hÖÚs*/303 ldr r1, =EPSR_T /* xPSR(Tビットが'1'である必要がある) */ 304 stmfd sp!, {r0-r1} /* ダミーフレームをスタック上に積む */ 305 sub sp, #(EXC_FRAME_SIZE - (4*2)) /* r0-r3,r12,lrの内容は設定する必要がない */ 306 bx r2 /* Threadモードへ移行 */ 312 307 313 308 ret_int_4: 314 bl search_schedtsk /* ÝÅN®³ê½^XNðÀs*/309 bl search_schedtsk /* 割込み中で起動されたタスクを実行 */ 315 310 bl run_task 316 311 ret_int_r: 317 svc 0 /* SVC ÌÄÑoµ*/318 319 /* 320 * xfBXpb`©çÌAÉêIÉÝ321 * ReLXgÉÚs·é½ßÌSVCR[nh312 svc 0 /* SVCの呼び出し */ 313 314 /* 315 * 遅延ディスパッチからの復帰時に一時的に割込み 316 * コンテキストに移行するためのSVCコールハンドラ 322 317 */ 323 318 … … 328 323 kernel_svc_handler: 329 324 /* 330 * Ý©çÌ^[ÉæèCCPUbNðóÔÉÚs·éæ331 * ¤õ·éD332 */ 333 cpsid f /* ÝbNóÔÖ*/334 ldr r2 , [ sp , #(EXC_FRAME_SIZE) ] /* lr ðX^bN©çæ¾*/335 add sp, #EXC_FRAME_SIZE + 8 /* X^bNðÌÄé*/325 * 割込み処理からのリターンにより,CPUロック解除状態に移行するよ 326 * う準備する. 327 */ 328 cpsid f /* 割込みロック状態へ */ 329 ldr r2 , [ sp , #(EXC_FRAME_SIZE) ] /* lrをスタックから取得 */ 330 add sp, #EXC_FRAME_SIZE + 8 /* スタックを捨てる */ 336 331 mov r0, #0 337 ldr r1, =lock_flag /* CPU bNðóÔÖ*/332 ldr r1, =lock_flag /* CPUロック解除状態へ */ 338 333 str r0, [r1] 339 334 msr basepri , r0 340 bx r2 /* ^[*/341 342 /* 343 * fBXpb`Ì®ìJn335 bx r2 /* リターン */ 336 337 /* 338 * ディスパッチャの動作開始 344 339 */ 345 340 .align 2 … … 349 344 start_dispatch: 350 345 /* 351 * ±Ì[`ÍCJ[lN®ÉC·×ÄÌÝðÖ~µ½óÔ352 * iÝbNóÔƯjÅÄÑo³êéDܽCÝ[hiñ353 * ^XNReLXgƯjÅÄÑo³êé±ÆðzèµÄ¢éD354 * 355 * prc_initialize ÅClock_flagðtrueÉCsaved_iipmðIIPM_ENAALLÉ356 * ú»µÄ¢é½ßCJ[lÇOÌÝð·é±ÆÅC357 * CPU bNóÔEifãÌjÝDæx}XNSðóÔÉÈéD358 * ܽCtask_initializeÅdisdspðfalseÉú»µÄ¢é½ßCfB359 * Xpb`ÂóÔÉÈÁÄ¢éD360 */ 361 ldr r0,=istkpt /* MSP ðú»*/362 ldr r1,[r0] /* start_dispatch ÄÑoµÉÄÑoµpÉ*/363 msr msp, r1 /* gpµÄ¢é½ßú»·é*/364 ldr r1, =IIPM_LOCK /* J[lÇàÌÝðÖ~*/346 * このルーチンは,カーネル起動時に,すべての割込みを禁止した状態 347 * (割込みロック状態と同等)で呼び出される.また,割込みモード(非 348 * タスクコンテキストと同等)で呼び出されることを想定している. 349 * 350 * prc_initializeで,lock_flagをtrueに,saved_iipmをIIPM_ENAALLに 351 * 初期化しているため,カーネル管理外の割込みを許可することで, 352 * CPUロック状態・(モデル上の)割込み優先度マスク全解除状態になる. 353 * また,task_initializeでdisdspをfalseに初期化しているため,ディ 354 * スパッチ許可状態になっている. 355 */ 356 ldr r0,=istkpt /* MSPを初期化 */ 357 ldr r1,[r0] /* start_dispatch呼び出し時に呼び出し用に */ 358 msr msp, r1 /* 使用しているため初期化する */ 359 ldr r1, =IIPM_LOCK /* カーネル管理内の割込みを禁止 */ 365 360 msr basepri, r1 366 cpsie f /* J[lÇOÌÝðÂ*/361 cpsie f /* カーネル管理外の割込みを許可 */ 367 362 b dispatcher 368 363 369 364 /* 370 * J[lÌI¹ÌÄoµ365 * カーネルの終了処理の呼出し 371 366 * 372 * X^bNðñ^XNReLXgpÉØèÖ¦D367 * スタックを非タスクコンテキスト用に切り替え. 373 368 * 374 369 */ … … 379 374 .type call_exit_kernel, function 380 375 call_exit_kernel: 381 b exit_kernel /* J[lÌI¹ðÄÔ*/382 383 384 /* 385 * ÷ÔÒ¿376 b exit_kernel /* カーネルの終了処理を呼ぶ */ 377 378 379 /* 380 * 微少時間待ち 386 381 */ 387 382 .text -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.