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 | 以ä¸ï¼
|
---|