[384] | 1 | =====================================================================
|
---|
| 2 | ARM64ããã»ããµä¾åé¨è¨è¨ã¡ã¢
|
---|
| 3 | Last Modified: 16 Apr 2019
|
---|
| 4 | =====================================================================
|
---|
| 5 |
|
---|
| 6 | â ãã®ããã¥ã¡ã³ãã®ä½ç½®ã¥ã
|
---|
| 7 |
|
---|
| 8 | ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/SSPã«ã¼ãã«ãARMv8-Aããã»ããµã«ç§»æ¤ããé
|
---|
| 9 | ã®è¨è¨ã¡ã¢ã§ããï¼
|
---|
| 10 |
|
---|
| 11 |
|
---|
| 12 | â ARMv8-Aã®ä»æ§ã¾ã¨ã
|
---|
| 13 |
|
---|
| 14 | ARMv8-Aã®ä»æ§ã®ãã¡ï¼ã«ã¼ãã«ã®è¨è¨ã«é¢ä¿ããäºé
|
---|
| 15 | ã«ã¤ãã¦ã¾ã¨ããï¼
|
---|
| 16 |
|
---|
| 17 | â ã¬ã¸ã¹ã¿
|
---|
| 18 |
|
---|
| 19 | æ±ç¨ã¬ã¸ã¹ã¿ã¯r0ãr30 (ç¹ã«64ãããã¬ã¸ã¹ã¿ã¯X0..X30ã§è¡¨ç¾)ã®31種é¡ãããªãï¼
|
---|
| 20 | ï¼åèï¼ãProcedure Call Standard for the ARM 64-bit Architectureã
|
---|
| 21 |
|
---|
| 22 | r0...r7 Parameter/result registers(å¼æ°ããã³è¿å¤ã®åã渡ãç¨)
|
---|
| 23 | r8 Indirect result location register (大ããªãã¼ã¿æ§é ã
|
---|
| 24 | è¿å¤ã¨ãã¦è¿ãå ´åãªã©ï¼å¼ã³åºãå´ãçµæãåãåºãããã«
|
---|
| 25 | éæ¥ã¢ãã¬ãã·ã³ã°ãå¤ç¨ããéï¼ãã®ãã¼ã¹ã¢ãã¬ã¹ãåã渡ã
|
---|
| 26 | ããããã«ä½¿ããã)
|
---|
| 27 | r9..r15 Caller-saved Temporary registers(å¼ã³åºãå´ã§ä¿åãã¹ãã¬ã¸ã¹ã¿)
|
---|
| 28 | r16(IP0) The first intra-procedure-call scratch register
|
---|
| 29 | ãªã³ã«ã«ãã£ã¦ veneer(注1) ããã³ PLT(Procedure Linkage Table,注2) ã³ã¼ã
|
---|
| 30 | ã®å¼ã³åºãã§ä½¿ãããï¼ãã以å¤ã®æã¯ãã³ãã©ãªã¬ã¸ã¹ã¿ã¨ãã¦ä½¿ããããã¨ãããï¼
|
---|
| 31 | (注1)ãªã³ã«ã«ãã£ã¦æ¿å
|
---|
| 32 | ¥ãããå°ããªã³ã¼ãçã§ï¼
|
---|
| 33 | åå²å½ä»¤ã®ã¿ã¼ã²ãããç¯å²å¤ã®å ´åãªã©ã«ä½¿ããã
|
---|
| 34 | (注2)å
|
---|
| 35 | ±æã©ã¤ãã©ãªã®å¼ã³åºãã§ã·ã³ãã«è§£æ±ºãè¡ãããã«ä½¿ç¨ããã
|
---|
| 36 | é¢æ°ãã¼ãã«
|
---|
| 37 | r17(IP1) The second intra-procedure-call temporary register(r16ã¨å½¹å²ã¯åã)
|
---|
| 38 | r18 The Platform Register(ãã©ãããã©ã¼ã ABIã§ä½¿ç¨ãããã¬ã¸ã¹ã¿ï¼
|
---|
| 39 | ABIã§ä½¿ãããªãå ´åã¯ãã³ãã©ãªã¬ã¸ã¹ã¿ã¨ãã¦ä½¿ããã)
|
---|
| 40 | r19..r28 Callee-saved registers(å¼ã³åºãããå´ã§ä¿åãã¦ä½¿ãã¬ã¸ã¹ã¿)
|
---|
| 41 | r29(FP) The Frame Pointer(ãã¬ã¼ã ãã¤ã³ã¿)
|
---|
| 42 | r30(LR) The Link Register(ãªã³ã¯ã¬ã¸ã¹ã¿)
|
---|
| 43 |
|
---|
| 44 | SSPã«ã¼ãã«ã®ã¢ã»ã³ãã©ã«ããå®è£
|
---|
| 45 | ã§ã¯r8, r16...r18ã¯ä½¿ç¨ãã¦ããªãï¼
|
---|
| 46 |
|
---|
| 47 |
|
---|
| 48 | â ã³ã¼ãªã³ã°ã³ã³ãã³ã·ã§ã³
|
---|
| 49 |
|
---|
| 50 | r0...r7 ãå¼æ°ããã³è¿å¤ã«ä½¿ãããï¼
|
---|
| 51 | ARMã«ããè¦å®ããã¦ããããï¼ã³ã³ãã¤ã©ã«ä¾åãããã®ã«ã¼ã«ã¨ãªã
|
---|
| 52 |
|
---|
| 53 |
|
---|
| 54 | â PSTATE
|
---|
| 55 |
|
---|
| 56 | AArch64ã§ã¯ããã»ããµã®ç¶æ
|
---|
| 57 | ã表ããã©ã°ã®éã¾ããã¾ã¨ãã¦PSTATEã¨å¼ã³ï¼
|
---|
| 58 | ããããã®ãã©ã°ã¸å¥ã
|
---|
| 59 | ã«ã¢ã¯ã»ã¹ããããã®ç¹å¥ãªã¬ã¸ã¹ã¿åãå®ç¾©ããã¦ããï¼
|
---|
| 60 |
|
---|
| 61 | PSTATEã®è©³ç´°ã¯ï¼ARM Architecture Reference Manual
|
---|
| 62 | ARMv8, for ARMv8-A architecture profile ã® D1.7 ãªã©ãåç
|
---|
| 63 | §ã®ãã¨ï¼
|
---|
| 64 |
|
---|
| 65 | ã»spsel
|
---|
| 66 | EL1ããä¸ã®ä¾å¤ã¬ãã«ã§ã¯ï¼spsel ã¨ããç¹å¥ãªå称ã®ã¬ã¸ã¹ã¿ã«ã¢ã¯ã»ã¹ãï¼
|
---|
| 67 | PSTATE.SPãã©ã°ã®å¤ãã»ãããã¦ä½¿ç¨ã¹ã¿ãã¯ã®åãæ¿ããè¡ãï¼
|
---|
| 68 |
|
---|
| 69 | ã»daif
|
---|
| 70 | daif ã¨ããå称ã®ã¬ã¸ã¹ã¿ã使ç¨ãã¦PSTATEã®D,A,I,Fããããæä½ãï¼
|
---|
| 71 | å種ä¾å¤ããã³å²è¾¼ã¿ã®ç¦æ¢/許å¯ãå¶å¾¡ãã
|
---|
| 72 |
|
---|
| 73 |
|
---|
| 74 | SSPã«ã¼ãã«ã®å®è£
|
---|
| 75 | ã§ã¯ï¼ã¹ã¿ãã¯ã¯SP_EL1ã®ã¿ã使ç¨ããï¼
|
---|
| 76 | ã¾ãï¼CPUããã¯ç¶æ
|
---|
| 77 | ããã³å²è¾¼ã¿ããã¯ç¶æ
|
---|
| 78 | ã®å®è£
|
---|
| 79 | ã«PSTATEã®Iããã³Fãã©ã°ã
|
---|
| 80 | å©ç¨ãã¦ããï¼
|
---|
| 81 |
|
---|
| 82 |
|
---|
| 83 | â å²è¾¼ã¿ãã¯ã¿
|
---|
| 84 |
|
---|
| 85 | ãã¯ã¿ãã¼ãã«ã®ã¢ãã¬ã¹ã¯ãªã»ããæã«ï¼ã·ã¹ãã ã¬ã¸ã¹ã¿ã®ä¸ã¤Vector Base
|
---|
| 86 | Address Register(VBAR, ã·ã¹ãã ã¬ã¸ã¹ã¿)ã«ã¢ãã¬ã¹ãã»ãããããã¨ã§ï¼
|
---|
| 87 | 2048ãã¤ãå¢çã®ä»»æã®ã¢ãã¬ã¹ã«é
|
---|
| 88 | ç½®å¯è½ã§ããï¼
|
---|
| 89 |
|
---|
| 90 | SSPã«ã¼ãã«ã®å®è£
|
---|
| 91 | ã§ã¯ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ã§è¨å®ãã¦ããï¼
|
---|
| 92 |
|
---|
| 93 |
|
---|
| 94 | â å²è¾¼ã¿
|
---|
| 95 |
|
---|
| 96 | ããã§ã¯GICãæè¼ããããã»ããµã®å ´åã«ã¤ãã¦è¿°ã¹ãï¼
|
---|
| 97 | ãã以å¤ã®å ´åã«ã¤ãã¦ã¯ãããä¾åé¨ã®ããã¥ã¡ã³ãã«è¨è¼ããï¼
|
---|
| 98 |
|
---|
| 99 |
|
---|
| 100 | âå²è¾¼ã¿åªå
|
---|
| 101 | 度
|
---|
| 102 |
|
---|
| 103 | GICã«ããã¦ã¯å²è¾¼ã¿åªå
|
---|
| 104 | 度ã¯è¨å®å¤ã®å°ããæ¹ãé«åªå
|
---|
| 105 | 度ã¨ãªãï¼
|
---|
| 106 |
|
---|
| 107 | åªå
|
---|
| 108 | 度ã¯æ大8bitã§ããï¼SoCæ¯ã«å®è£
|
---|
| 109 | ããã¦ãããããå¹
|
---|
| 110 | ãç°ãªãï¼å®è£
|
---|
| 111 | ã
|
---|
| 112 | ãããããã8bit以ä¸ã®å ´åã¯ï¼LSBããç¡å¹ã«ãªãï¼ä¾ãã°ï¼å®è£
|
---|
| 113 | ããã¦ã
|
---|
| 114 | ããããå¹
|
---|
| 115 | ã7bitã®å ´åã¯ï¼ããã0ãç¡å¹ã¨ãªãï¼
|
---|
| 116 |
|
---|
| 117 | åªå
|
---|
| 118 | 度ã®ããããã£ã¼ã«ãã®LSBããæ°ãããããµãåªå
|
---|
| 119 | 度ã¨å¼ã¶ãã£ã¼ã«ã
|
---|
| 120 | ã«è¨å®ãããã¨ãå¯è½ã§ããï¼æ®ãã®ä¸ä½ããããããªã¨ã³ãã·ã§ã³åªå
|
---|
| 121 | 度ã¨
|
---|
| 122 | å¼ã¶ï¼ããªã¨ã³ãã·ã§ã³åªå
|
---|
| 123 | 度ãåãã§ï¼ãµãåªå
|
---|
| 124 | 度ãç°ãªãåªå
|
---|
| 125 | 度ã®ã°ã«ã¼
|
---|
| 126 | ãã¯ï¼ãäºããããªã¨ã³ãããããã¨ãã§ããªãï¼
|
---|
| 127 |
|
---|
| 128 | ä¾ã¨ãã¦ï¼QEMU Virtãã¼ãåãSSPã®å®è£
|
---|
| 129 | ã§ã¯ Cortex-A53ããã»ããµã
|
---|
| 130 | ã¿ã¼ã²ããã¨ãã¦ããï¼åªå
|
---|
| 131 | 度ã¯16段é(4bit)ã§ããã0ãã3ãç¡å¹ã§ããï¼
|
---|
| 132 |
|
---|
| 133 | âå²è¾¼ã¿/ä¾å¤ã®åä»
|
---|
| 134 |
|
---|
| 135 | GICã®å ´åï¼å²è¾¼ã¿ãåãä»ããã¨åãä»ããå²è¾¼ã¿ã®çªå·ãGICC_IARã«ã»ãããããï¼
|
---|
| 136 | å²è¾¼ã¿çªå·ã¯ãã®ã¬ã¸ã¹ã¿ã«ã»ãããããå¤ã使ç¨ããï¼
|
---|
| 137 |
|
---|
| 138 | ä¾å¤çªå·ã¯ï¼ä¾å¤çºçæã®ããã»ããµç¶æ
|
---|
| 139 | ã«å¿ãã¦æ±ºå®ãããï¼ãã¯ã¿ãã¼ãã«ä¸ã®
|
---|
| 140 | ã¸ã£ã³ãå
|
---|
| 141 | ãªãã»ããæ¯ã«ç°ãªãçªå·ãå²ãæ¯ããã¨ã«ãã¦ããï¼
|
---|
| 142 |
|
---|
| 143 | ä¾å¤çºçæã®ç¶æ
|
---|
| 144 | ä¾å¤ã®ç¨®é¡ ä¾å¤çªå· ãä¾å¤ãã¯ã¿å
|
---|
| 145 | é ããã®ãªãã»ãã
|
---|
| 146 | AArch64, EL1t(EL1, SP_EL0) Synchronous 0 0x0000
|
---|
| 147 | AArch64, EL1t(EL1, SP_EL0) SError 1 0x0180
|
---|
| 148 | AArch64, EL1h(EL1, SP_EL1) Synchronous 2 0x0200
|
---|
| 149 | AArch64, EL1h(EL1, SP_EL1) SError 3 0x0380
|
---|
| 150 | AArch64, EL0 (EL0, SP_EL0) Synchronous 4 0x0400
|
---|
| 151 | AArch64, EL0 (EL0, SP_EL0) SError 5 0x0580
|
---|
| 152 | AArch32, EL0 (EL0, SP_EL0) Synchronous 6 0x0600
|
---|
| 153 | AArch32, EL0 (EL0, SP_EL0) SError 7 0x0780
|
---|
| 154 |
|
---|
| 155 | å²è¾¼ã¿ãåãä»ããéï¼åãä»ããå²è¾¼ã¿ã«è¨å®ãããåªå
|
---|
| 156 | 度ããä½ãå²è¾¼ã¿ã
|
---|
| 157 | ç¦æ¢ããããï¼GICC_RPRããåå¾ããå²è¾¼ã¿è¦å ã®å²è¾¼ã¿åªå
|
---|
| 158 | 度ã GICC_PMRã¸
|
---|
| 159 | ã»ãããã¦ããï¼ããã¦ãã³ãã©çµäºå¾ã«å²è¾¼ã¿çºçåã®å²ãè¾¼ã¿åªå
|
---|
| 160 | 度ã«æ»ãï¼
|
---|
| 161 |
|
---|
| 162 |
|
---|
| 163 | [CPUã¢ã¼ã]
|
---|
| 164 |
|
---|
| 165 | ããã»ããµã¯ï¼EL0ããEL3ã¾ã§ã®ä¾å¤ã¬ãã«ã®ããããã§åä½ããï¼
|
---|
| 166 | ã¾ãããããã®ã¬ãã«ã§64ãããã¢ã¼ã(AArch64) ã¾ãã¯32ãããã¢ã¼ã(AArch32)ã
|
---|
| 167 | é¸æãããã¨ãã§ããï¼ãã ãï¼ããä¾å¤ã¬ãã«ã32ãããã¢ã¼ãã§åä½ããå ´åã¯
|
---|
| 168 | ããããä½ãä¾å¤ã¬ãã«ã§ã¯64ãããã¢ã¼ããé¸æãããã¨ãã§ããªãï¼
|
---|
| 169 |
|
---|
| 170 | ã¾ãï¼ã»ãã¥ãªãã£æ¡å¼µæ©è½ãæè¼ããããã»ããµã§ã¯ã»ãã¥ã¢ã¢ã¼ãããã³
|
---|
| 171 | éã»ãã¥ã¢ã¢ã¼ããé¸æãããã¨ãã§ããï¼
|
---|
| 172 |
|
---|
| 173 | SSPã®å®è£
|
---|
| 174 | ã§ã¯ï¼64ãããã¢ã¼ã(AArch64)ï¼éã»ãã¥ã¢ï¼ä¾å¤ã¬ãã«1(EL1) ã§åä½ããï¼
|
---|
| 175 |
|
---|
| 176 |
|
---|
| 177 | âãªã»ããæã®ç¶æ
|
---|
| 178 |
|
---|
| 179 |
|
---|
| 180 | ãªã»ããæã¯ããã»ããµãããããµãã¼ãããæ大ã®ä¾å¤ã¬ãã«ããã³ãã®ã¬ãã«ã®
|
---|
| 181 | ã¹ã¿ãã¯(SP_ELx)ãæå¹ã¨ãªã£ã¦ããï¼
|
---|
| 182 |
|
---|
| 183 | ä¾ã¨ãã¦QEMUåãVirtãã¼ã(Cortex-A53) ã§ã¯ï¼æ¢å®ã§EL1ãæ大ä¾å¤ã¬ãã«ã®ãã
|
---|
| 184 | ãªã»ããç´å¾ã¯SP_EL1ãæå¹ã¨ãªã£ã¦ããï¼
|
---|
| 185 |
|
---|
| 186 |
|
---|
| 187 | â ã¹ã¿ãã¯ãã¤ã³ã¿ï¼SP_EL0ã¨SP_ELxï¼
|
---|
| 188 |
|
---|
| 189 | ã¹ã¿ãã¯ãã¤ã³ã¿ã¯ï¼ä¾å¤ã¬ãã«0ã®ã¹ã¿ãã¯ãã¤ã³ã¿(SP_EL0)ããã³å®è¡ä¸ã®
|
---|
| 190 | ä¾å¤ã¬ãã«ã®ã¹ã¿ãã¯ãã¤ã³ã¿(SP_ELx)ãé¸æå¯è½ã§ããï¼
|
---|
| 191 | ã¹ã¿ãã¯ã®é¸æã¯spselã¬ã¸ã¹ã¿ã¸1ãè¨å®ããã¨SP_ELxãï¼0ãè¨å®ããã¨
|
---|
| 192 | SP_EL0 ãé¸æããï¼
|
---|
| 193 |
|
---|
| 194 | SSPã®å®è£
|
---|
| 195 | ã§ã¯ï¼EL1 㧠SP_EL1 ã®ã¿ã使ç¨ãã¦åä½ããï¼
|
---|
| 196 |
|
---|
| 197 |
|
---|
| 198 | âä¾å¤ã¬ãã«ã®é·ç§»
|
---|
| 199 |
|
---|
| 200 | ä¾å¤ã¬ãã«(EL)ã®é·ç§»ã¯å²è¾¼ã¿/ä¾å¤ã®åä»ããã³ä¾å¤ãªã¿ã¼ã³å½ä»¤(eret)ã«ããè¡ãï¼
|
---|
| 201 |
|
---|
| 202 | å²è¾¼ã¿ããã³ä¾å¤ãåãä»ãããã¨ã§çºçåã¨åãã¾ãã¯ããé«ãä¾å¤ã¬ãã«ã¸é·ç§»ããï¼
|
---|
| 203 | ä¸æ¹ï¼åãã¾ãã¯ããä½ãä¾å¤ã¬ãã«ã¸ã®é·ç§»ã¯ä¾å¤ãªã¿ã¼ã³å½ä»¤(eret)ã«ããè¡ãï¼
|
---|
| 204 |
|
---|
| 205 | åä»æã®é·ç§»å
|
---|
| 206 | ã¨ãªãä¾å¤ã¬ãã«ã®æå®ã¯ã·ã¹ãã ã¬ã¸ã¹ã¿ã«ããè¨å®ãããã¨ã§è¡ãï¼
|
---|
| 207 | å²è¾¼ã¿/ä¾å¤ãªã¿ã¼ã³æã®é·ç§»å
|
---|
| 208 | ã¨ãªãä¾å¤ã¬ãã«ã¯ï¼SPSR_ELxã®ããã2ããã³3ã§
|
---|
| 209 | æå®ããï¼å²è¾¼ã¿/ä¾å¤åä»æï¼PSTATEã®ç¶æ
|
---|
| 210 | ãSPSR_ELxã«ï¼ãªã¿ã¼ã³ã¢ãã¬ã¹ãELR_ELxã«ï¼
|
---|
| 211 | ããããä¿åããeretå½ä»¤ã®å®è¡ã«ãããã®æ ¼ç´å¤ã復帰ãããããï¼eretå®è¡åã«
|
---|
| 212 | ãããããSPSR_ELxã«ã»ãããã¦ãããã¨ã§æå®ããä¾å¤ã¬ãã«ã¸é·ç§»ãããã¨ãå¯è½ã§ããï¼
|
---|
| 213 | åãã¿ã¤ãã³ã°ã§ä½¿ç¨ã¹ã¿ãã¯ã64ããã/32ãããã¢ã¼ãã®æå®ãè¡ããã¨ãã§ããï¼
|
---|
| 214 |
|
---|
| 215 | QEMU VirtåãSSPã®å®è£
|
---|
| 216 | ã§ã¯EL1ã®ã¿ã使ç¨ããããï¼ä¾å¤ã¬ãã«éã®é·ç§»å¦çã¯è¡ã£ã¦ããªãï¼
|
---|
| 217 |
|
---|
| 218 |
|
---|
| 219 | âä¾å¤ã¬ãã«ã®å¤å®
|
---|
| 220 |
|
---|
| 221 | ç¾ç¶ã®ä¾å¤ã¬ãã«ãå¤å®ããã«ã¯ï¼CPSRã®ããã2ããã³ããã3ã®å¤ã使ç¨ããï¼
|
---|
| 222 | bit[3:2]ã®å¤ã
|
---|
| 223 | '11'ã®å ´åï¼EL3
|
---|
| 224 | '10'ã®å ´åï¼EL2
|
---|
| 225 | '01'ã®å ´åï¼EL1
|
---|
| 226 | '00'ã®å ´åï¼EL0
|
---|
| 227 |
|
---|
| 228 | âGICC_PMRã¬ã¸ã¹ã¿
|
---|
| 229 |
|
---|
| 230 | è¨å®ããåªå
|
---|
| 231 | 度以ä¸(å¤ã¨ãã¦ã¯ä»¥ä¸)ã®åªå
|
---|
| 232 | 度ã®å²è¾¼ã¿ã®åä»ãç¦æ¢ããï¼
|
---|
| 233 | è¨å®å¯è½ãªæ大å¤ãè¨å®ããã¨ï¼å
|
---|
| 234 | ¨ã¦ã®å²è¾¼ã¿ã許å¯ããï¼
|
---|
| 235 | ä¾ãã°åªå
|
---|
| 236 | 度ã16段éã®å ´åã¯0xf0(=0x0f << 4)ãã»ããããã¨ãã¹ã¦ã®å²è¾¼ã¿è¨±å¯
|
---|
| 237 | ã¨ãªãï¼å¤ã¯ä¾å¤/å²è¾¼ã¿ã®åä»ã¨ãªã¿ã¼ã³ã«ããå¤åããªãããï¼åãä»ããå²è¾¼ã¿
|
---|
| 238 | ã®åªå
|
---|
| 239 | 度ãå²è¾¼ã¿ã®å
|
---|
| 240 | ¥å£å¦çã§è¨å®ããå¿
|
---|
| 241 | è¦ãããï¼
|
---|
| 242 |
|
---|
| 243 | âä¾å¤/å²è¾¼ã¿ã®åä»
|
---|
| 244 |
|
---|
| 245 | ã»ä¾å¤/å²è¾¼ã¿ãåä»ããã¨ï¼åä»ãæã«ã¢ã¯ãã£ããªã¹ã¿ãã¯ä¸ã«ä»¥ä¸ã®ã³
|
---|
| 246 | ã³ããã¹ããä¿åããï¼
|
---|
| 247 |
|
---|
| 248 | --------------- <- new SP
|
---|
| 249 | | GICC_PMR |
|
---|
| 250 | ----------------
|
---|
| 251 | | å²è¾¼ã¿/ä¾å¤çªå·|
|
---|
| 252 | ----------------
|
---|
| 253 | | ESR_ELx |
|
---|
| 254 | ----------------
|
---|
| 255 | | ELR_ELx |
|
---|
| 256 | ----------------
|
---|
| 257 | | SPSR_ELx |
|
---|
| 258 | ----------------
|
---|
| 259 | | X30 |
|
---|
| 260 | ----------------
|
---|
| 261 | | X29 |
|
---|
| 262 | ----------------
|
---|
| 263 | | ï¼ |
|
---|
| 264 | | ï¼ |
|
---|
| 265 | ----------------
|
---|
| 266 | | X1 |
|
---|
| 267 | ----------------
|
---|
| 268 | | X0 |
|
---|
| 269 | ---------------- <- old SP
|
---|
| 270 | | |
|
---|
| 271 |
|
---|
| 272 |
|
---|
| 273 | å²è¾¼ã¿/ä¾å¤çºçæã®ä¸»ãªã·ã¼ã±ã³ã¹ã¯æ¬¡ã®ããã«ãªãï¼é·ç§»å
|
---|
| 274 | ã®ä¾å¤ã¬ãã«ãELxã¨è¡¨ç¾ããï¼
|
---|
| 275 |
|
---|
| 276 | ï¼ãã¼ãã¦ã§ã¢ã®å¦çï¼
|
---|
| 277 | ã»PSTATEãSPSR_ELxã«ä¿åãã
|
---|
| 278 | ã»ãªã¿ã¼ã³ã¢ãã¬ã¹ãELR_ELxã«ä¿åãã
|
---|
| 279 | ã»PSTATE.{D,A,I,F}ã1ã«ã»ãããã
|
---|
| 280 | ã»åæä¾å¤ããã³SErrorå²è¾¼ã¿ã®ã¨ãï¼ä¾å¤è¦å æ
|
---|
| 281 | å ±ãESR_ELxã«ä¿åãã
|
---|
| 282 | ã»ã¹ã¿ãã¯ãã¤ã³ã¿ãSP_ELxã«åãæ¿ãã
|
---|
| 283 | ã»ELxã¸é·ç§»ãã
|
---|
| 284 |
|
---|
| 285 | ï¼ã½ããã¦ã§ã¢ã§ã®å¦çï¼
|
---|
| 286 | ã»(çºçæã«SP_EL0ã使ç¨ãã¦ããå ´å)ã¹ã¿ãã¯ãå²è¾¼ã¿çºçå(SP_EL0)ã«æ»ã
|
---|
| 287 | ã»æ±ç¨ã¬ã¸ã¹ã¿(X0-X30)ãã¹ã¿ãã¯ã«ä¿å
|
---|
| 288 | ã»SPSR_ELx, ESR_ELx, ELR_ELxãã¹ã¿ãã¯ã«ä¿å
|
---|
| 289 | ã»ã¹ã¿ãã¯ãã¤ã³ã¿ã®ã¢ã©ã¤ã¡ã³ãã調æ´
|
---|
| 290 | ã»å²è¾¼ã¿çªå·(GICC_IARããåå¾)ï¼ä¾å¤çªå·(ãªãã»ããæ¯ã«å®ç¾©ããå¤)ãã¹ã¿ãã¯ã«ä¿å
|
---|
| 291 | ã»å²è¾¼ã¿çºçåã®å²è¾¼ã¿åªå
|
---|
| 292 | 度ãã¹ã¯ãã¹ã¿ãã¯ã«ä¿å
|
---|
| 293 | ã»GICC_PMRã«åãä»ããå²è¾¼ã¿ã®å²è¾¼ã¿åªå
|
---|
| 294 | 度ãã»ãã
|
---|
| 295 | ã»å²è¾¼ã¿/ä¾å¤ãã¹ãã«ã¦ã³ã¿ã®ã¤ã³ã¯ãªã¡ã³ã
|
---|
| 296 | ã»(å²è¾¼ã¿ã®å ´å)CPUããã¯è§£é¤
|
---|
| 297 | ã»ãã¯ã¿ãã¼ãã«ãèªã¿è¾¼ã¿ãã³ãã©ãå®è¡ãã
|
---|
| 298 |
|
---|
| 299 | âä¾å¤/å²è¾¼ã¿ããã®ãªã¿ã¼ã³
|
---|
| 300 |
|
---|
| 301 | ï¼ã½ããã¦ã§ã¢ã§ã®å¦çï¼
|
---|
| 302 | ã»CPUããã¯ç¶æ
|
---|
| 303 | ã¸ç§»è¡
|
---|
| 304 | ã»å²è¾¼ã¿/ä¾å¤ãã¹ã¨ã«ã¦ã³ã¿ã®ãã¯ãªã¡ã³ã
|
---|
| 305 | ã»GICC_PMRã«å²è¾¼ã¿çºçåã®åªå
|
---|
| 306 | 度ãã¹ã¯ãæ»ã
|
---|
| 307 | ã»ã¹ã¿ãã¯ãã¤ã³ã¿ã®ã¢ã©ã¤ã¡ã³ã調æ´åãæ»ã
|
---|
| 308 | ã»æ»ãå
|
---|
| 309 | ã®ã³ã³ããã¹ããã·ã¹ãã ç¶æ
|
---|
| 310 | ã«å¿ãã¦å²è¾¼ã¿/ä¾å¤çºçå
|
---|
| 311 | ã¸ãªã¿ã¼ã³
|
---|
| 312 | ã¾ãã¯é
|
---|
| 313 | 延ãã£ã¹ããããå®è¡ãã
|
---|
| 314 | ã»ELR_ELxã«æ»ãå
|
---|
| 315 | ã¢ãã¬ã¹ï¼SPSR_ELxã«ããã»ããµç¶æ
|
---|
| 316 | ããããã
|
---|
| 317 | ã»ããããã¦ããç¶æ
|
---|
| 318 | ã§eretå½ä»¤ãå®è¡ãï¼å²è¾¼ã¿/ä¾å¤ãããªã¿ã¼ã³
|
---|
| 319 |
|
---|
| 320 |
|
---|
| 321 | âOSã®å®è£
|
---|
| 322 |
|
---|
| 323 |
|
---|
| 324 | 1.ã³ã¢ä¾åé¨å称: arm64
|
---|
| 325 |
|
---|
| 326 | ARMv8 ã§ã¯ï¼64ãããã¢ã¼ã(AArch64)ããã³32ãããã¢ã¼ã(AArch32)ã®ä¸¡æ¹ããµãã¼ãããã
|
---|
| 327 | æ¬å®è£
|
---|
| 328 | ã¯64ãããã¢ã¼ãã®ã¿ããµãã¼ããããã¨ãæ示ããããããã»ããµä¾åé¨å称ã arm64 ã¨ãã
|
---|
| 329 |
|
---|
| 330 | 2. ä¾å¤ã¢ã¼ãã®ä½¿ãåã
|
---|
| 331 |
|
---|
| 332 | æ¬å®è£
|
---|
| 333 | ã§ã¯ã¿ã¹ã¯ã³ã³ããã¹ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãããããä¾å¤ã¬ãã«1(EL1)ã§åä½ããï¼
|
---|
| 334 | ã¿ã¹ã¯ã³ã³ããã¹ããEL0ã§åä½ããæ¡ãèããããï¼ãã®å ´åã¯å²è¾¼ã¿/ä¾å¤ã®åºå£å¦çã«ããã¦
|
---|
| 335 | é
|
---|
| 336 | 延ãã£ã¹ãããã®åã«ä¾å¤ã¬ãã«ã®åãæ¿ããå¿
|
---|
| 337 | è¦ã¨ãªãï¼
|
---|
| 338 |
|
---|
| 339 | 3.ãã£ã¹ãããã£ã®å®è¡ã¢ã¼ã
|
---|
| 340 |
|
---|
| 341 | æ¬å®è£
|
---|
| 342 | ã§ã¯ãã¹ã¦ä¾å¤ã¬ãã«1ã§åä½ããããï¼ãã£ã¹ãããã£ã¯ä¾å¤ã¬ãã«1(EL1)ã§åä½ããï¼
|
---|
| 343 |
|
---|
| 344 |
|
---|
| 345 | 4.ã¹ã¿ãã¯ã®ä½¿ãåã
|
---|
| 346 |
|
---|
| 347 | SSPã§ã¯ã¿ã¹ã¯ã³ã³ããã¹ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãå
|
---|
| 348 | ±ã«ä¸ã¤ã®ã¹ã¿ãã¯ãå
|
---|
| 349 | ±ç¨ããï¼
|
---|
| 350 | æ¬å®è£
|
---|
| 351 | ã§ã¯SP_ELxã使ç¨ãã¦ããï¼
|
---|
| 352 | ãã®ä»ã«SP_EL0ã使ç¨ããå®è£
|
---|
| 353 | ãèããããï¼ãã®å ´åã¯å²è¾¼ã¿/ä¾å¤ã®å
|
---|
| 354 | ¥å£å¦çã«ã¦
|
---|
| 355 | ã¬ã¸ã¹ã¿ãä¿åããåã«SP_EL0ã¸ã®ã¹ã¿ãã¯åãæ¿ããè¡ãï¼
|
---|
| 356 |
|
---|
| 357 | 5.ã³ã³ããã¹ãã®å¤å®
|
---|
| 358 |
|
---|
| 359 | å²è¾¼ã¿/ä¾å¤ã®ãã¹ãåæ°ãä¿æããå¤æ°(intnest)ã0ãªãã¿ã¹ã¯ã¿ã¹ã¯ã³ã³ããã¹ãï¼
|
---|
| 360 | 1以ä¸ãªãéã¿ã¹ã¯ã³ã³ããã¹ãã¨ããï¼
|
---|
| 361 | ã³ã³ããã¹ãæ¯ã«ä¾å¤ã¬ãã«ãåããå®è£
|
---|
| 362 | ãåãå ´åã¯PSTATEã®ããã2ããã³3ã§
|
---|
| 363 | ä¾å¤ã¬ãã«ãèªã¿åºããã¨ã«ããå¤å¥ããã¨ããæ¹æ³ãèããããï¼
|
---|
| 364 | æ¬å®è£
|
---|
| 365 | ã§ã¯ã³ã³ããã¹ãã«ãããåãä¾å¤ã¬ãã«ã使ç¨ãï¼ããã»ããµã®
|
---|
| 366 | ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ã§ã¯å¤å¥ãã§ããªãããå¤æ°ã§å¤å¥ããï¼
|
---|
| 367 |
|
---|
| 368 | 6. CPUããã¯
|
---|
| 369 |
|
---|
| 370 | CPUããã¯PSTATE.Iã«ããCPUããã¯ãå®ç¾ããï¼
|
---|
| 371 |
|
---|
| 372 | 7. å²è¾¼ã¿ããã¯ã¨CPUä¾å¤ã®é¢ä¿
|
---|
| 373 |
|
---|
| 374 | FIQãã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã¨ããããï¼å²è¾¼ã¿ããã¯ã¯PSTATE.Iã«å ãã¦
|
---|
| 375 | PSTATE.Fãç¨ãã¦å®ç¾ããï¼ãã ãï¼ãã©ã°ããäºãã«ç¬ç«ãããããï¼
|
---|
| 376 | å²è¾¼ã¿ããã¯ç¶æ
|
---|
| 377 | ã®è¨å®/解é¤ã®éã¯ï¼ããã¯åã«CPUããã¯ãã©ã°(=PSTATE.I)ã®
|
---|
| 378 | ç¶æ
|
---|
| 379 | ãä¿åãï¼è§£é¤åã«å
|
---|
| 380 | ã®ç¶æ
|
---|
| 381 | ã«æ»ãããã«ãã¦ããï¼
|
---|
| 382 |
|
---|
| 383 | 8. å¤é¨åªå
|
---|
| 384 | 度ã¨å
|
---|
| 385 | é¨åªå
|
---|
| 386 | 度
|
---|
| 387 |
|
---|
| 388 | å¤é¨åªå
|
---|
| 389 | 度ã¨ã¯APIã§æå®ããå²è¾¼ã¿åªå
|
---|
| 390 | 度(PRIå)ã®ãã¨ã§ããï¼å¤ãå°ãã
|
---|
| 391 | ã»ã©åªå
|
---|
| 392 | 度ãé«ãï¼å²è¾¼ã¿ãã³ãã©ã«ã¯ï¼-1ããé£ç¶ããè² ã®å¤ãè¨å®å¯è½ã§
|
---|
| 393 | ããï¼GICã®å ´åï¼å
|
---|
| 394 | é¨åªå
|
---|
| 395 | 度ã¯ï¼GICC_PMRã¬ã¸ã¹ã¿ã«è¨å®ããå¤ã§ããï¼
|
---|
| 396 | å¤é¨åªå
|
---|
| 397 | 度ã¨å
|
---|
| 398 | é¨åªå
|
---|
| 399 | 度ã®å¤æã¯ä»¥ä¸ã®ãã¯ãã§è¡¨ç¾ãããï¼
|
---|
| 400 |
|
---|
| 401 | /* å¤é¨è¡¨ç¾ã¸ã®å¤æ */
|
---|
| 402 | #define EXT_IPM(pri) \
|
---|
| 403 | (((PRI)((pri) >> GIC_PRI_SHIFT)) - (GIC_PRI_LEVEL - 1))
|
---|
| 404 |
|
---|
| 405 | /* å
|
---|
| 406 | é¨è¡¨ç¾ã¸ã®å¤æ */
|
---|
| 407 | #define INT_IPM(ipm) \
|
---|
| 408 | (((uint_t)((ipm) + (GIC_PRI_LEVEL - 1))) << GIC_PRI_SHIFT)
|
---|
| 409 |
|
---|
| 410 | ããã§GIC_PRI_LEVELã¯ãµãã¼ãããå²è¾¼ã¿åªå
|
---|
| 411 | 度ã®æ°ï¼GIC_PRI_SHIFTã¯GICC_PMRã¬ã¸ã¹ã¿å
|
---|
| 412 |
|
---|
| 413 | ã®ï¼å
|
---|
| 414 | é¨åªå
|
---|
| 415 | 度ã®å¤ãæ ¼ç´ãããä½ç½®ï¼ããã0ããã®ãªãã»ããï¼ã表ãï¼
|
---|
| 416 |
|
---|
| 417 |
|
---|
| 418 | 9. ã«ã¼ãã«ç®¡çå
|
---|
| 419 | ã®æé«åªå
|
---|
| 420 | 度(CPUããã¯ç¶æ
|
---|
| 421 | ã§ã®åªå
|
---|
| 422 | 度ãã¹ã¯)
|
---|
| 423 |
|
---|
| 424 | GICã®å ´åï¼ã«ã¼ãã«ç®¡çå
|
---|
| 425 | ã®å²è¾¼ã¿ã®æé«åªå
|
---|
| 426 | 度ã¯è¨å®å¯è½ãªå¤é¨åªå
|
---|
| 427 | 度ã®æé«å¤ã¨åãã¨ããï¼
|
---|
| 428 |
|
---|
| 429 |
|
---|
| 430 | 以ä¸ï¼
|
---|