Changeset 386 for ssp_rpi3/trunk/arch/arm64_gcc/common/core_support.S
- Timestamp:
- Apr 17, 2019, 12:13:00 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ssp_rpi3/trunk/arch/arm64_gcc/common/core_support.S
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r384 r386 8 8 * Nagoya Municipal Industrial Research Institute, JAPAN 9 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 * ããã»ããµä¾åã¢ã¸ã¥ã¼ã« ã¢ã»ã³ããªè¨èªé¨ï¼ARM64ç¨ï¼ 10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 15 * スコード中に含まれていること. 16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 19 * の無保証規定を掲載すること. 20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 22 * と. 23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 24 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 26 * 報告すること. 27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 31 * 免責すること. 32 * 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 38 * 39 */ 40 41 /* 42 * プロセッサ依存モジュール アセンブリ言語部(ARM64用) 58 43 */ 59 44 60 45 #define TOPPERS_MACRO_ONLY 61 #define UINT_C(val) (val) /* uint_t åã®å®æ°ãä½ããã¯ã*/62 #define ULONG_C(val) (val) /* ulong_t åã®å®æ°ãä½ããã¯ã*/63 #define UINT64_C(val) (val) /* uint64_t åã®å®æ°ãä½ããã¯ã*/64 #define CAST(type, val) (val) /* åãã£ã¹ããè¡ããã¯ã*/46 #define UINT_C(val) (val) /* uint_t型の定数を作るマクロ */ 47 #define ULONG_C(val) (val) /* ulong_t型の定数を作るマクロ */ 48 #define UINT64_C(val) (val) /* uint64_t型の定数を作るマクロ */ 49 #define CAST(type, val) (val) /* 型キャストを行うマクロ */ 65 50 66 51 #include "kernel_impl.h" 67 52 68 53 /* 69 * ãã£ã¹ãããã£ã®åä½éå§54 * ディスパッチャの動作開始 70 55 */ 71 56 .text … … 75 60 start_dispatch: 76 61 /* 77 * ãã®ã«ã¼ãã³ã¯ï¼ã«ã¼ãã«èµ·åæã«ï¼ä»¥ä¸ã®ç¶æ 78 ã§å¼ã³åºãããï¼ 79 * ã»ãã¹ã¦ã®å²è¾¼ã¿ãç¦æ¢ããç¶æ 80 å²è¾¼ã¿ããã¯ç¶æ 81 ã¨åçï¼ 82 * ã»å²è¾¼ã¿åªå 83 度ãã¹ã¯å 84 ¨è§£é¤ç¶æ 85 62 * このルーチンは,カーネル起動時に,以下の状態で呼び出される. 63 * ・すべての割込みを禁止した状態割込みロック状態と同等) 64 * ・割込み優先度マスク全解除状態 86 65 * 87 * ããã§ã¯ dispatcher ãå¼ã³åºãåã®åæè¨å®ãè¡ãï¼ 88 * (1) ã·ã¹ãã ç¶æ 89 ã®åæåï¼ä»¥ä¸ã®ç¶æ 90 ã¸ç§»è¡ããï¼ 91 * ã»å 92 ¨å²è¾¼ã¿ããã¯è§£é¤ç¶æ 93 (ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿è¨±å¯) 94 * ã»CPUããã¯ç¶æ 95 (ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ç¦æ¢) 96 * ã»å²è¾¼ã¿åªå 97 度ãã¹ã¯å 98 ¨è§£é¤ç¶æ 99 100 * ã»ãã£ã¹ããã許å¯ç¶æ 101 66 * ここでは dispatcher を呼び出す前の初期設定を行う. 67 * (1) システム状態の初期化.以下の状態へ移行する. 68 * ・全割込みロック解除状態(カーネル管理外の割込み許可) 69 * ・CPUロック状態(カーネル管理の割込み禁止) 70 * ・割込み優先度マスク全解除状態 71 * ・ディスパッチ許可状態 102 72 * 103 * (1-1) å²è¾¼ã¿åªå 104 度ãã¹ã¯ã¯åæãããã§ã« 105 * ã¢ãã«ä¸ã®ï¼å²è¾¼ã¿åªå 106 度ãã¹ã¯å 107 ¨è§£é¤ç¶æ 108 ã«ãªã£ã¦ããï¼ 109 * (1-2) ãã£ã¹ãããç¦æ¢ãã©ã°ã¯ task_initialize 㧠disdsp ã false ã« 110 * åæåãã¦ããããï¼ãã§ã«ãã£ã¹ããã許å¯ç¶æ 111 ã«ãªã£ã¦ããï¼ 112 * (1-3) ããã§ã¯å²è¾¼ã¿ããã¯ç¶æ 113 ã解é¤ãï¼CPUããã¯ç¶æ 114 ã®è¨å®ãè¡ãï¼ 73 * (1-1) 割込み優先度マスクは前提よりすでに 74 * モデル上の)割込み優先度マスク全解除状態になっている. 75 * (1-2) ディスパッチ禁止フラグは task_initialize で disdsp を false に 76 * 初期化しているため,すでにディスパッチ許可状態になっている. 77 * (1-3) ここでは割込みロック状態を解除し,CPUロック状態の設定を行う. 115 78 * 116 * (2) ã¹ã¿ãã¯ãã¤ã³ã¿ã®åæå117 * start_dispatch ãå¼ã³åºãããã¨ï¼ä»å¾ããã«æ»ã£ã¦ãããã¨ã¯ãªããã118 * ã¹ã¿ãã¯ãã¤ã³ã¿ãããã§åæåããï¼79 * (2) スタックポインタの初期化 80 * start_dispatch が呼び出されると,今後ここに戻ってくることはないため 81 * スタックポインタをここで初期化する. 119 82 */ 120 83 ldr x0, =_kernel_istkpt // setup stack … … 122 85 mov sp, x0 123 86 124 // F ãã©ã°ãã¯ãªã¢(å²è¾¼ã¿ããã¯è§£é¤ï¼CPUããã¯ç¸å½)87 // F フラグをクリア(割込みロック解除,CPUロック相当) 125 88 msr daifclr, #AARCH64_DAIF_FIQ 126 89 127 // dispatcher å¼ã³åºã90 // dispatcher呼び出し 128 91 b dispatcher 129 92 130 93 /* 131 * ã«ã¼ãã«ã®çµäºå¦çã®å¼åºã132 * 133 * ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã«åãæ¿ãï¼94 * カーネルの終了処理の呼出し 95 * 96 * スタックを非タスクコンテキスト用に切り替え. 134 97 * 135 98 */ … … 140 103 call_exit_kernel: 141 104 /* 142 * ã¹ã¿ãã¯ãã¤ã³ã¿ã®åæå105 * スタックポインタの初期化 143 106 */ 144 107 ldr x0, =_kernel_istkpt … … 146 109 mov sp, x0 147 110 148 // å 149 ¨ã¦ã®ä¾å¤ããã¹ã¯(å 150 ¨å²è¾¼ã¿ããã¯ç¸å½) 111 // 全ての例外をマスク(全割込みロック相当) 151 112 msr daifset, #(AARCH64_DAIF_ALL) 152 113 153 b exit_kernel /* ã«ã¼ãã«ã®çµäºå¦çãå¼ã¶*/154 155 156 /* 157 * å²è¾¼ã¿/ä¾å¤ã³ã³ããã¹ãä¿åå¦ç114 b exit_kernel /* カーネルの終了処理を呼ぶ */ 115 116 117 /* 118 * 割込み/例外コンテキスト保存処理 158 119 */ 159 120 .macro __save_context 160 121 /* 161 * x0 - x29 ã®ä¿å(x0,x1ãã¢ããx28, x29ã¾ã§)122 * x0 - x29 の保存(x0,x1ペアからx28, x29まで) 162 123 */ 163 124 stp x1, x0, [sp, #-16]! … … 178 139 179 140 /* 180 * spsr_el1, x30 ããã¢ã§ä¿å141 * spsr_el1, x30をペアで保存 181 142 */ 182 143 mrs x21, spsr_el1 … … 184 145 185 146 /* 186 * esr_el1, elr_el1 ããã¢ã§ä¿å147 * esr_el1, elr_el1 をペアで保存 187 148 */ 188 149 mrs x21, esr_el1 … … 191 152 192 153 /* 193 * 追å ã®æ ¼ç´é åã確ä¿ããããï¼SPãæ¸ç®ãã¦ãã154 * 追加の格納領域を確保するため,SPを減算しておく 194 155 */ 195 156 sub sp, sp, #16 … … 197 158 198 159 /* 199 * ã³ã³ããã¹ã復帰å¦ç160 * コンテキスト復帰処理 200 161 */ 201 162 .macro __restore_context 202 163 /* 203 * ã¹ã¿ãã¯ã«ä¿åããä¸é¨ãã¼ã¿ã®ç ´æ£164 * スタックに保存した一部データの破棄 204 165 */ 205 166 mov x1, #16 206 167 add sp, sp, x1 207 168 /* 208 * ELR ã®å¾©å 209 (ESRã¯ç ´æ£) 169 * ELR の復元(ESRは破棄) 210 170 */ 211 171 ldp x21, x22, [sp], #16 212 172 msr elr_el1, x22 213 173 /* 214 * SPSR/x30 ã®å¾©å 215 174 * SPSR/x30 の復元 216 175 */ 217 176 ldp x21, x30, [sp], #16 … … 219 178 220 179 /* 221 * x0 - x29 ã®å¾©å 222 180 * x0 - x29 の復元 223 181 */ 224 182 ldp x29, x28, [sp], #16 … … 240 198 241 199 /* 242 * ( ã«ã¼ãã«ç®¡çå¤ã®)CPUä¾å¤/FIQã®åºå£å¦ç200 * (カーネル管理外の)CPU例外/FIQの出口処理 243 201 */ 244 202 .text … … 248 206 ret_exc: 249 207 ret_fiq: 250 __restore_context // ã¬ã¸ã¹ã¿å¾©å¸°208 __restore_context // レジスタ復帰 251 209 eret 252 210 253 211 /* 254 * å²è¾¼ã¿/(ã«ã¼ãã«ç®¡çã®)CPUä¾å¤ã®åºå£å¦ç 255 * åæï¼CPUããã¯ç¶æ 256 , ãã¹ãã«ã¦ã³ã¿ãã¯ãªã¡ã³ãæ¸ã¿ 212 * 割込み/(カーネル管理の)CPU例外の出口処理 213 * 前提:CPUロック状態, ネストカウンタデクリメント済み 257 214 */ 258 215 .text … … 260 217 .global ret_int 261 218 ret_int: 262 // æ»ãå 263 ã®ã³ã³ããã¹ãã確èªãï¼å¤æ®µå²è¾¼ã¿ãªããªã¿ã¼ã³ 219 // 戻り先のコンテキストを確認し,多段割込みならリターン 264 220 ldr x1, =_kernel_intnest 265 221 ldrb w3, [x1] 266 222 cbnz w3, int_return 267 223 268 ret_int_2: // å段ã®å²è¾¼ã¿ã®å ´å 269 // reqflg ã false ãªãå¼ã³åºãå 270 ã¸æ»ã 224 ret_int_2: // 初段の割込みの場合 225 // reqflg が false なら呼び出し元へ戻る 271 226 ldr x0, =reqflg 272 227 ldr w1, [x0] 273 228 cbz w1, int_return 274 229 275 ret_int_3: // reqflg ã true ã®å ´å230 ret_int_3: // reqflg が true の場合 276 231 mov w1, #0 // reqflg = false 277 232 str w1, [x0] 278 233 279 // ãã£ã¹ãããç¦æ¢ãªãå¼ã³åºãå 280 ã¸æ»ã 234 // ディスパッチ禁止なら呼び出し元へ戻る 281 235 ldr x0, =disdsp 282 236 ldr w1, [x0] … … 284 238 285 239 /* 286 * é 287 延ãã£ã¹ããã 288 * search_schedtsk ã®è¿å¤(x0)ãå¼æ°ã¨ã㦠run_task ãå¼ã³åºã 240 * 遅延ディスパッチ 241 * search_schedtsk の返値(x0)を引数として run_task を呼び出す 289 242 */ 290 243 bl search_schedtsk … … 292 245 293 246 /* 294 * å¼ã³åºãå 295 ã¸ãªã¿ã¼ã³ 247 * 呼び出し元へリターン 296 248 */ 297 249 int_return: 298 __restore_context // ã¬ã¸ã¹ã¿å¾©å¸°250 __restore_context // レジスタ復帰 299 251 eret 300 252 301 253 /* 302 * å²è¾¼ã¿ãã¯ã¿303 * æåã«å²è¾¼ã¿çºçåã®ã¹ã¿ãã¯ã«æ»ãã¦ããã¬ã¸ã¹ã¿ãä¿åãã304 * ãã¼ãã¦ã§ã¢ã«ãã£ã¦PSTATE.{I,F} ãã»ããæ¸ã§ãããã¨ãåæã¨ãã254 * 割込みベクタ 255 * 最初に割込み発生前のスタックに戻してからレジスタを保存する 256 * ハードウェアによってPSTATE.{I,F} がセット済であることを前提とする 305 257 */ 306 258 .text … … 313 265 314 266 // Sync EL1 315 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã316 __save_context 317 mov x22, #0 // ä¾å¤çªå·ãx22ã«ã»ãã267 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 268 __save_context 269 mov x22, #0 // 例外番号をx22にセット 318 270 b chip_exc_entry 319 271 320 272 // IRQ EL1 321 273 .align 7 322 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã274 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 323 275 __save_context 324 276 b chip_int_entry … … 326 278 // FIQ EL1 327 279 .align 7 328 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã¸æ»ã280 msr spsel, #0 // 例外発生前のスタック(SP_EL0)へ戻す 329 281 __save_context 330 282 b chip_fiq_entry … … 332 284 // SError EL1 333 285 .align 7 334 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã¸æ»ã335 __save_context 336 mov x22, #1 // ä¾å¤çªå·ãx22ã«ã»ãã286 msr spsel, #0 // 例外発生前のスタック(SP_EL0)へ戻す 287 __save_context 288 mov x22, #1 // 例外番号をx22にセット 337 289 b chip_exc_entry 338 290 … … 344 296 .align 7 345 297 __save_context 346 mov x22, #2 // ä¾å¤çªå·ãx22ã«ã»ãã298 mov x22, #2 // 例外番号をx22にセット 347 299 b chip_exc_entry 348 300 … … 360 312 .align 7 361 313 __save_context 362 mov x22, #3 // ä¾å¤çªå·ãx22ã«ã»ãã314 mov x22, #3 // 例外番号をx22にセット 363 315 b chip_exc_entry 364 316 … … 369 321 // Sync EL0 370 322 .align 7 371 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã372 __save_context 373 mov x22, #4 // ä¾å¤çªå·ãx22ã«ã»ãã323 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 324 __save_context 325 mov x22, #4 // 例外番号をx22にセット 374 326 b chip_exc_entry 375 327 376 328 // IRQ EL0 377 329 .align 7 378 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã330 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 379 331 __save_context 380 332 b chip_int_entry … … 382 334 // FIQ EL0 383 335 .align 7 384 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã336 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 385 337 __save_context 386 338 b chip_fiq_entry … … 388 340 // Error EL0 389 341 .align 7 390 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã391 __save_context 392 mov x22, #5 // ä¾å¤çªå·ãx22ã«ã»ãã342 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 343 __save_context 344 mov x22, #5 // 例外番号をx22にセット 393 345 b chip_exc_entry 394 346 … … 399 351 // AArch32 sync 400 352 .align 7 401 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã402 __save_context 403 mov x22, #6 // ä¾å¤çªå·ãx22ã«ã»ãã353 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 354 __save_context 355 mov x22, #6 // 例外番号をx22にセット 404 356 b chip_exc_entry 405 357 406 358 // AArch32 IRQ 407 359 .align 7 408 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã360 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 409 361 __save_context 410 362 b chip_int_entry … … 412 364 // AArch32 FIQ 413 365 .align 7 414 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã366 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 415 367 __save_context 416 368 b chip_fiq_entry … … 418 370 // AArch32 Error 419 371 .align 7 420 msr spsel, #0 // ä¾å¤çºçåã®ã¹ã¿ãã¯(SP_EL0)ã«æ»ã421 __save_context 422 mov x22, #7 // ä¾å¤çªå·ãx22ã«ã»ãã423 b chip_exc_entry 372 msr spsel, #0 // 例外発生前のスタック(SP_EL0)に戻す 373 __save_context 374 mov x22, #7 // 例外番号をx22にセット 375 b chip_exc_entry -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.