File tree Expand file tree Collapse file tree 1 file changed +16
-14
lines changed
Expand file tree Collapse file tree 1 file changed +16
-14
lines changed Original file line number Diff line number Diff line change @@ -185,29 +185,31 @@ GUEST_CODE static noinline void guest_handle_rdmsr(uint64 reg)
185185GUEST_CODE static noinline void guest_handle_wr_crn (struct api_call_2 * cmd )
186186{
187187 uint64 value = cmd -> args [1 ];
188- switch (cmd -> args [0 ]) {
189- case 0 :
188+ // Prevent the compiler from generating a switch table.
189+ volatile uint64 reg = cmd -> args [0 ];
190+ if (reg == 0 ) {
190191 // Move value to CR0.
191192 asm volatile ("movq %0, %%cr0" ::"r" (value ) : "memory" );
192- break ;
193- case 2 :
193+ return ;
194+ }
195+ if (reg == 2 ) {
194196 // Move value to CR2.
195197 asm volatile ("movq %0, %%cr2" ::"r" (value ) : "memory" );
196- break ;
197- case 3 :
198+ return ;
199+ }
200+ if (reg == 3 ) {
198201 // Move value to CR3.
199202 asm volatile ("movq %0, %%cr3" ::"r" (value ) : "memory" );
200- break ;
201- case 4 :
203+ return ;
204+ }
205+ if (reg == 4 ) {
202206 // Move value to CR4.
203207 asm volatile ("movq %0, %%cr4" ::"r" (value ) : "memory" );
204- break ;
205- case 8 :
208+ return ;
209+ }
210+ if (reg == 8 ) {
206211 // Move value to CR8 (TPR - Task Priority Register).
207212 asm volatile ("movq %0, %%cr8" ::"r" (value ) : "memory" );
208- break ;
209- default :
210- // Do nothing.
211- break ;
213+ return ;
212214 }
213215}
You can’t perform that action at this time.
0 commit comments