Changeset 414 in vbox
- Timestamp:
- Jan 29, 2007 5:57:59 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/src/VBox/VMM/VMMSwitcher/AMD64ToPAE.asm (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMSwitcher/AMD64ToPAE.asm
r193 r414 128 128 ;; 129 129 ; general registers. 130 ; mov [ edx + CPUM.Host.rax], rax - scratch130 ; mov [rdx + CPUM.Host.rax], rax - scratch 131 131 mov [rdx + CPUM.Host.rbx], rbx 132 ; mov [ edx + CPUM.Host.rcx], rcx - scratch133 ; mov [ edx + CPUM.Host.rdx], rdx - scratch132 ; mov [rdx + CPUM.Host.rcx], rcx - scratch 133 ; mov [rdx + CPUM.Host.rdx], rdx - scratch 134 134 mov [rdx + CPUM.Host.rdi], rdi 135 135 mov [rdx + CPUM.Host.rsi], rsi 136 136 mov [rdx + CPUM.Host.rsp], rsp 137 137 mov [rdx + CPUM.Host.rbp], rbp 138 ; mov [ edx + CPUM.Host.r8 ], r8 - scratch139 ; mov [ edx + CPUM.Host.r9 ], r9 - scratch138 ; mov [rdx + CPUM.Host.r8 ], r8 - scratch 139 ; mov [rdx + CPUM.Host.r9 ], r9 - scratch 140 140 mov [rdx + CPUM.Host.r10], r10 141 141 mov [rdx + CPUM.Host.r11], r11 … … 199 199 test esi, CPUM_USE_DEBUG_REGS | CPUM_USE_DEBUG_REGS_HOST 200 200 jz htg_debug_regs_no 201 jmp htg_debug_regs_save _dr7and6201 jmp htg_debug_regs_save 202 202 htg_debug_regs_no: 203 203 DEBUG_CHAR('a') ; trashes esi … … 270 270 dd 0 271 271 272 273 ;; 274 ; Detour for saving the host DR7 and DR6. 275 ; esi and rdx must be preserved. 276 htg_debug_regs_save: 277 DEBUG_S_CHAR('s'); 278 mov rax, dr7 ; not sure, but if I read the docs right this will trap if GD is set. FIXME!!! 279 mov [rdx + CPUM.Host.dr7], rax 280 xor eax, eax ; clear everything. (bit 12? is read as 1...) 281 mov dr7, rax 282 mov rax, dr6 ; just in case we save the state register too. 283 mov [rdx + CPUM.Host.dr6], rax 284 ; save host DR0-3? 285 test esi, CPUM_USE_DEBUG_REGS 286 jz near htg_debug_regs_no 287 DEBUG_S_CHAR('S'); 288 mov rax, dr0 289 mov [rdx + CPUM.Host.dr0], rax 290 mov rbx, dr1 291 mov [rdx + CPUM.Host.dr1], rbx 292 mov rcx, dr2 293 mov [rdx + CPUM.Host.dr2], rcx 294 mov rax, dr3 295 mov [rdx + CPUM.Host.dr3], rax 296 jmp htg_debug_regs_no 297 298 272 299 ; We're now on an identity mapped pages! in 32-bit compatability mode. 273 300 BITS 32 … … 396 423 397 424 ;; 398 ; Detour for saving the host DR7 and DR6.399 ; esi and edx must be preserved.400 htg_debug_regs_save_dr7and6:401 DEBUG_S_CHAR('s');402 mov eax, dr7 ; not sure, but if I read the docs right this will trap if GD is set. FIXME!!!403 mov [edx + CPUM.Host.dr7], eax404 xor eax, eax ; clear everything. (bit 12? is read as 1...)405 mov dr7, eax406 mov eax, dr6 ; just in case we save the state register too.407 mov [edx + CPUM.Host.dr6], eax408 jmp htg_debug_regs_no409 410 ;;411 425 ; Detour for saving host DR0-3 and loading hypervisor debug registers. 412 426 ; esi and edx must be preserved. … … 415 429 DEBUG_S_CHAR('R') 416 430 DEBUG_S_CHAR('x') 417 ; save host DR0-3.418 mov eax, dr0419 mov [edx + CPUM.Host.dr0], eax420 mov ebx, dr1421 mov [edx + CPUM.Host.dr1], ebx422 mov ecx, dr2423 mov [edx + CPUM.Host.dr2], ecx424 mov eax, dr3425 mov [edx + CPUM.Host.dr3], eax426 431 ; load hyper DR0-7 427 432 mov ebx, [edx + CPUM.Hyper.dr0] … … 892 897 mov rbx, rdx 893 898 mov ecx, MSR_K8_FS_BASE 894 mov eax, [ ebx + CPUM.Host.FSbase]895 mov edx, [ ebx + CPUM.Host.FSbase + 4]899 mov eax, [rbx + CPUM.Host.FSbase] 900 mov edx, [rbx + CPUM.Host.FSbase + 4] 896 901 wrmsr 897 902 mov ecx, MSR_K8_GS_BASE 898 mov eax, [ ebx + CPUM.Host.GSbase]899 mov edx, [ ebx + CPUM.Host.GSbase + 4]903 mov eax, [rbx + CPUM.Host.GSbase] 904 mov edx, [rbx + CPUM.Host.GSbase + 4] 900 905 wrmsr 901 906 mov ecx, MSR_K6_EFER 902 mov eax, [ ebx + CPUM.Host.efer]903 mov edx, [ ebx + CPUM.Host.efer + 4]907 mov eax, [rbx + CPUM.Host.efer] 908 mov edx, [rbx + CPUM.Host.efer + 4] 904 909 wrmsr 905 910 mov rdx, rbx … … 908 913 ; restore general registers. 909 914 mov eax, edi ; restore return code. eax = return code !! 910 ; mov rax, [ edx + CPUM.Host.rax] - scratch + return code915 ; mov rax, [rdx + CPUM.Host.rax] - scratch + return code 911 916 mov rbx, [rdx + CPUM.Host.rbx] 912 ; mov rcx, [ edx + CPUM.Host.rcx] - scratch913 ; mov rdx, [ edx + CPUM.Host.rdx] - scratch917 ; mov rcx, [rdx + CPUM.Host.rcx] - scratch 918 ; mov rdx, [rdx + CPUM.Host.rdx] - scratch 914 919 mov rdi, [rdx + CPUM.Host.rdi] 915 920 mov rsi, [rdx + CPUM.Host.rsi] 916 921 mov rsp, [rdx + CPUM.Host.rsp] 917 922 mov rbp, [rdx + CPUM.Host.rbp] 918 ; mov r8, [ edx + CPUM.Host.r8 ] - scratch919 ; mov r9, [ edx + CPUM.Host.r9 ] - scratch923 ; mov r8, [rdx + CPUM.Host.r8 ] - scratch 924 ; mov r9, [rdx + CPUM.Host.r9 ] - scratch 920 925 mov r10, [rdx + CPUM.Host.r10] 921 926 mov r11, [rdx + CPUM.Host.r11] … … 926 931 927 932 ; finally restore flags. (probably not required) 928 push qword [ edx + CPUM.Host.rflags]933 push qword [rdx + CPUM.Host.rflags] 929 934 popf 930 935
Note:
See TracChangeset
for help on using the changeset viewer.

