VirtualBox

Changeset 20543 in vbox


Ignore:
Timestamp:
Jun 13, 2009 10:09:32 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
48546
Message:

VMMR0JmpA*,tstVMMR0CallHost-*: some cleanup, build tests for both versions of the code (switching and non-switching).

Location:
trunk/src/VBox/VMM
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMInternal.mac

    r19577 r20543  
    55
    66;
    7 ; Copyright (C) 2006-2007 Sun Microsystems, Inc.
     7; Copyright (C) 2006-2009 Sun Microsystems, Inc.
    88;
    99; This file is part of VirtualBox Open Source Edition (OSE), as
     
    2121
    2222%include "VBox/asmdefs.mac"
     23
     24;
     25; Determin the default stack switching unless specified explicitly.
     26;
     27%ifndef VMM_R0_SWITCH_STACK
     28 %ifndef VMM_R0_NO_SWITCH_STACK
     29  %ifdef RT_OS_DARWIN
     30   %define VMM_R0_SWITCH_STACK
     31  %endif
     32 %endif
     33%endif
     34
    2335
    2436struc VMMR0JMPBUF
     
    4557    ; traditional jmp_buf
    4658    .rbx            resq 1
    47 %ifdef RT_OS_WINDOWS
     59 %ifdef RT_OS_WINDOWS
    4860    .rsi            resq 1
    4961    .rdi            resq 1
    50 %endif
     62 %endif
    5163    .rbp            resq 1
    5264    .r12            resq 1
  • trunk/src/VBox/VMM/VMMR0/VMMR0JmpA-amd64.asm

    r20541 r20543  
    2424;*******************************************************************************
    2525%include "VBox/asmdefs.mac"
    26 %include "VMMInternal.mac"
     26%include "../VMMInternal.mac"
    2727%include "iprt/err.mac"
    28 
    29 %ifdef RT_OS_DARWIN
    30  %define VMM_R0_SWITCH_STACK
    31 %endif
     28%include "VBox/param.mac"
    3229
    3330
     
    6663    mov     rdx, rdi                    ; pJmpBuf
    6764 %endif
    68     mov     [rdx + VMMR0JMPBUF.rbx], rbx
    69  %ifdef ASM_CALL64_MSC
    70     mov     [rdx + VMMR0JMPBUF.rsi], rsi
    71     mov     [rdx + VMMR0JMPBUF.rdi], rdi
     65    mov     [xDX + VMMR0JMPBUF.rbx], rbx
     66 %ifdef ASM_CALL64_MSC
     67    mov     [xDX + VMMR0JMPBUF.rsi], rsi
     68    mov     [xDX + VMMR0JMPBUF.rdi], rdi
    7269 %endif
    7370    mov     r10, [rbp]
    74     mov     [rdx + VMMR0JMPBUF.rbp], r10
    75     mov     [rdx + VMMR0JMPBUF.r12], r12
    76     mov     [rdx + VMMR0JMPBUF.r13], r13
    77     mov     [rdx + VMMR0JMPBUF.r14], r14
    78     mov     [rdx + VMMR0JMPBUF.r15], r15
    79     mov     rax, [rbp + 8]
    80     mov     [rdx + VMMR0JMPBUF.rip], rax
     71    mov     [xDX + VMMR0JMPBUF.rbp], r10
     72    mov     [xDX + VMMR0JMPBUF.r12], r12
     73    mov     [xDX + VMMR0JMPBUF.r13], r13
     74    mov     [xDX + VMMR0JMPBUF.r14], r14
     75    mov     [xDX + VMMR0JMPBUF.r15], r15
     76    mov     xAX, [rbp + 8]
     77    mov     [xDX + VMMR0JMPBUF.rip], xAX
    8178    lea     r10, [rbp + 10h]            ; (used in resume)
    82     mov     [rdx + VMMR0JMPBUF.rsp], r10
     79    mov     [xDX + VMMR0JMPBUF.rsp], r10
    8380
    8481    ;
    8582    ; If we're not in a ring-3 call, call pfn and return.
    8683    ;
    87     test    byte [rdx + VMMR0JMPBUF.fInRing3Call], 1
     84    test    byte [xDX + VMMR0JMPBUF.fInRing3Call], 1
    8885    jnz     .resume
    8986
    9087 %ifdef VMM_R0_SWITCH_STACK
    91     mov     r15, [rdx + VMMR0JMPBUF.pvSavedStack]
     88    mov     r15, [xDX + VMMR0JMPBUF.pvSavedStack]
    9289    test    r15, r15
    9390    jz      .entry_error
     
    9693    jne     .entry_error
    9794    mov     rdi, r15
    98     mov     rcx, 1024
    99     mov     rax, 00eeeeeeeffeeeeeeeh
     95    mov     rcx, VMM_STACK_SIZE / 8
     96    mov     rax, 00eeeeeeeeffeeeeeeeh
    10097    repne stosq
    10198    mov     [rdi - 10h], rbx
    10299  %endif
    103     lea     r15, [r15 + 8192 - 40h]
     100    lea     r15, [r15 + VMM_STACK_SIZE - 40h]
    104101    mov     rsp, r15                    ; Switch stack!
    105102 %endif ; VMM_R0_SWITCH_STACK
     
    118115 %ifdef VMM_R0_SWITCH_STACK
    119116  %ifdef VBOX_STRICT
    120     mov     r15, [rdx + VMMR0JMPBUF.pvSavedStack]
     117    mov     r15, [xDX + VMMR0JMPBUF.pvSavedStack]
    121118    mov     dword [r15], 0h             ; Reset the marker
    122119  %endif
     
    127124    ;
    128125.proper_return:
    129     mov     rbx, [rdx + VMMR0JMPBUF.rbx]
    130  %ifdef ASM_CALL64_MSC
    131     mov     rsi, [rdx + VMMR0JMPBUF.rsi]
    132     mov     rdi, [rdx + VMMR0JMPBUF.rdi]
    133  %endif
    134     mov     r12, [rdx + VMMR0JMPBUF.r12]
    135     mov     r13, [rdx + VMMR0JMPBUF.r13]
    136     mov     r14, [rdx + VMMR0JMPBUF.r14]
    137     mov     r15, [rdx + VMMR0JMPBUF.r15]
    138     mov     rbp, [rdx + VMMR0JMPBUF.rbp]
    139     mov     rcx, [rdx + VMMR0JMPBUF.rip]
    140     and     qword [rdx + VMMR0JMPBUF.rip], byte 0 ; used for valid check.
    141     mov     rsp, [rdx + VMMR0JMPBUF.rsp]
    142     jmp     rcx
     126    mov     rbx, [xDX + VMMR0JMPBUF.rbx]
     127 %ifdef ASM_CALL64_MSC
     128    mov     rsi, [xDX + VMMR0JMPBUF.rsi]
     129    mov     rdi, [xDX + VMMR0JMPBUF.rdi]
     130 %endif
     131    mov     r12, [xDX + VMMR0JMPBUF.r12]
     132    mov     r13, [xDX + VMMR0JMPBUF.r13]
     133    mov     r14, [xDX + VMMR0JMPBUF.r14]
     134    mov     r15, [xDX + VMMR0JMPBUF.r15]
     135    mov     rbp, [xDX + VMMR0JMPBUF.rbp]
     136    mov     xCX, [xDX + VMMR0JMPBUF.rip]
     137    and     qword [xDX + VMMR0JMPBUF.rip], byte 0 ; used for valid check.
     138    mov     rsp, [xDX + VMMR0JMPBUF.rsp]
     139    jmp     xCX
    143140
    144141.entry_error:
     
    146143    jmp     .proper_return
    147144
    148     ;
    149     ; Resume VMMR0CallHost the call.
    150     ;
    151 .resume:
    152  %ifdef VMM_R0_SWITCH_STACK
    153     ; Switch stack.
    154     mov     rsp, [rdx + VMMR0JMPBUF.SpResume]
    155  %else  ; !VMM_R0_SWITCH_STACK
    156     ; Sanity checks.
    157     cmp     r10, [rdx + VMMR0JMPBUF.SpCheck]
    158     je      .rspCheck_ok
     145.stack_overflow:
     146    mov     eax, VERR_INTERNAL_ERROR_5
     147    jmp     .proper_return
     148
     149    ;
     150    ; Aborting resume.
     151    ;
    159152.bad:
    160     and     qword [rdx + VMMR0JMPBUF.rip], byte 0 ; used for valid check.
    161     mov     rbx, [rdx + VMMR0JMPBUF.rbx]
    162   %ifdef ASM_CALL64_MSC
    163     mov     rsi, [rdx + VMMR0JMPBUF.rsi]
    164     mov     rdi, [rdx + VMMR0JMPBUF.rdi]
    165   %endif
    166     mov     r12, [rdx + VMMR0JMPBUF.r12]
    167     mov     r13, [rdx + VMMR0JMPBUF.r13]
    168     mov     r14, [rdx + VMMR0JMPBUF.r14]
    169     mov     r15, [rdx + VMMR0JMPBUF.r15]
    170     mov     eax, VERR_INTERNAL_ERROR_2
     153    and     qword [xDX + VMMR0JMPBUF.rip], byte 0 ; used for valid check.
     154    mov     rbx, [xDX + VMMR0JMPBUF.rbx]
     155 %ifdef ASM_CALL64_MSC
     156    mov     rsi, [xDX + VMMR0JMPBUF.rsi]
     157    mov     rdi, [xDX + VMMR0JMPBUF.rdi]
     158 %endif
     159    mov     r12, [xDX + VMMR0JMPBUF.r12]
     160    mov     r13, [xDX + VMMR0JMPBUF.r13]
     161    mov     r14, [xDX + VMMR0JMPBUF.r14]
     162    mov     r15, [xDX + VMMR0JMPBUF.r15]
     163    mov     eax, VERR_INTERNAL_ERROR_3    ; todo better return code!
    171164    leave
    172165    ret
    173166
    174 .rspCheck_ok:
    175     mov     ecx, [rdx + VMMR0JMPBUF.cbSavedStack]
    176     cmp     rcx, 8192
     167    ;
     168    ; Resume VMMR0CallHost the call.
     169    ;
     170.resume:
     171    ; Sanity checks.
     172 %ifdef VMM_R0_SWITCH_STACK
     173    ;; @todo amd64/switch/resume sanity.
     174 %else  ; !VMM_R0_SWITCH_STACK
     175    cmp     r10, [xDX + VMMR0JMPBUF.SpCheck]
     176    jne     .bad
     177
     178    mov     ecx, [xDX + VMMR0JMPBUF.cbSavedStack]
     179    cmp     rcx, VMM_STACK_SIZE
    177180    ja      .bad
    178181    test    rcx, 3
    179182    jnz     .bad
    180     mov     rdi, [rdx + VMMR0JMPBUF.rsp]
    181     sub     rdi, [rdx + VMMR0JMPBUF.SpResume]
     183    mov     rdi, [xDX + VMMR0JMPBUF.rsp]
     184    sub     rdi, [xDX + VMMR0JMPBUF.SpResume]
    182185    cmp     rcx, rdi
    183186    jne     .bad
    184 
    185     ;
     187 %endif
     188
     189%ifdef VMM_R0_SWITCH_STACK
     190    ; Switch stack.
     191    mov     rsp, [xDX + VMMR0JMPBUF.SpResume]
     192%else
    186193    ; Restore the stack.
    187     ;
    188     mov     ecx, [rdx + VMMR0JMPBUF.cbSavedStack]
     194    mov     ecx, [xDX + VMMR0JMPBUF.cbSavedStack]
    189195    shr     ecx, 3
    190     mov     rsi, [rdx + VMMR0JMPBUF.pvSavedStack]
    191     mov     rdi, [rdx + VMMR0JMPBUF.SpResume]
     196    mov     rsi, [xDX + VMMR0JMPBUF.pvSavedStack]
     197    mov     rdi, [xDX + VMMR0JMPBUF.SpResume]
    192198    mov     rsp, rdi
    193199    rep movsq
    194  %endif ; !VMM_R0_SWITCH_STACK
    195     mov     byte [rdx + VMMR0JMPBUF.fInRing3Call], 0
     200%endif ; !VMM_R0_SWITCH_STACK
     201    mov     byte [xDX + VMMR0JMPBUF.fInRing3Call], 0
    196202
    197203    ;
    198204    ; Continue where we left off.
    199205    ;
     206%ifdef VBOX_STRICT
     207    pop     eax                         ; magic
     208    cmp     eax, 0f00dbed0h
     209    je      .magic_ok
     210    mov     ecx, 0123h
     211    mov     [ecx], edx
     212.magic_ok:
     213%endif
    200214    popf
    201215    pop     rbx
     
    237251    push    rbx
    238252    pushf
     253%ifdef VBOX_STRICT
     254    push    dword 0f00dbed0h
     255%endif
    239256
    240257    ;
     
    252269    ; Is the jump buffer armed?
    253270    ;
    254     cmp     qword [rdx + VMMR0JMPBUF.rip], byte 0
     271    cmp     qword [xDX + VMMR0JMPBUF.rip], byte 0
    255272    je      .nok
    256273
     
    258275    ; Sanity checks.
    259276    ;
    260     mov     rdi, [rdx + VMMR0JMPBUF.pvSavedStack]
     277    mov     rdi, [xDX + VMMR0JMPBUF.pvSavedStack]
    261278    test    rdi, rdi                    ; darwin may set this to 0.
    262279    jz      .nok
    263     mov     [rdx + VMMR0JMPBUF.SpResume], rsp
     280    mov     [xDX + VMMR0JMPBUF.SpResume], rsp
    264281 %ifndef VMM_R0_SWITCH_STACK
    265282    mov     rsi, rsp
    266     mov     rcx, [rdx + VMMR0JMPBUF.rsp]
     283    mov     rcx, [xDX + VMMR0JMPBUF.rsp]
    267284    sub     rcx, rsi
    268285
    269286    ; two sanity checks on the size.
    270     cmp     rcx, 8192                   ; check max size.
     287    cmp     rcx, VMM_STACK_SIZE         ; check max size.
    271288    jnbe    .nok
    272289
     
    276293    test    ecx, 7                      ; check alignment
    277294    jnz     .nok
    278     mov     [rdx + VMMR0JMPBUF.cbSavedStack], ecx
     295    mov     [xDX + VMMR0JMPBUF.cbSavedStack], ecx
    279296    shr     ecx, 3
    280297    rep movsq
     
    284301    ; Save RSP & RBP to enable stack dumps
    285302    mov     rcx, rbp
    286     mov     [rdx + VMMR0JMPBUF.SavedEbp], rcx
     303    mov     [xDX + VMMR0JMPBUF.SavedEbp], rcx
    287304    sub     rcx, 8
    288     mov     [rdx + VMMR0JMPBUF.SavedEsp], rcx
     305    mov     [xDX + VMMR0JMPBUF.SavedEsp], rcx
    289306
    290307    ; store the last pieces of info.
    291     mov     rcx, [rdx + VMMR0JMPBUF.rsp]
    292     mov     [rdx + VMMR0JMPBUF.SpCheck], rcx
    293     mov     byte [rdx + VMMR0JMPBUF.fInRing3Call], 1
     308    mov     rcx, [xDX + VMMR0JMPBUF.rsp]
     309    mov     [xDX + VMMR0JMPBUF.SpCheck], rcx
     310    mov     byte [xDX + VMMR0JMPBUF.fInRing3Call], 1
    294311
    295312    ;
    296313    ; Do the long jump.
    297314    ;
    298     mov     rbx, [rdx + VMMR0JMPBUF.rbx]
    299  %ifdef ASM_CALL64_MSC
    300     mov     rsi, [rdx + VMMR0JMPBUF.rsi]
    301     mov     rdi, [rdx + VMMR0JMPBUF.rdi]
    302  %endif
    303     mov     r12, [rdx + VMMR0JMPBUF.r12]
    304     mov     r13, [rdx + VMMR0JMPBUF.r13]
    305     mov     r14, [rdx + VMMR0JMPBUF.r14]
    306     mov     r15, [rdx + VMMR0JMPBUF.r15]
    307     mov     rbp, [rdx + VMMR0JMPBUF.rbp]
    308     mov     rcx, [rdx + VMMR0JMPBUF.rip]
    309     mov     rsp, [rdx + VMMR0JMPBUF.rsp]
     315    mov     rbx, [xDX + VMMR0JMPBUF.rbx]
     316 %ifdef ASM_CALL64_MSC
     317    mov     rsi, [xDX + VMMR0JMPBUF.rsi]
     318    mov     rdi, [xDX + VMMR0JMPBUF.rdi]
     319 %endif
     320    mov     r12, [xDX + VMMR0JMPBUF.r12]
     321    mov     r13, [xDX + VMMR0JMPBUF.r13]
     322    mov     r14, [xDX + VMMR0JMPBUF.r14]
     323    mov     r15, [xDX + VMMR0JMPBUF.r15]
     324    mov     rbp, [xDX + VMMR0JMPBUF.rbp]
     325    mov     rcx, [xDX + VMMR0JMPBUF.rip]
     326    mov     rsp, [xDX + VMMR0JMPBUF.rsp]
    310327    jmp     rcx
    311328
     
    314331    ;
    315332.nok:
     333%ifdef VBOX_STRICT
     334    pop     rax                         ; magic
     335    cmp     eax, 0f00dbed0h
     336    je      .magic_ok
     337    mov     ecx, 0123h
     338    mov     [rcx], edx
     339.magic_ok:
     340%endif
    316341    mov     eax, VERR_INTERNAL_ERROR_4
    317342    popf
  • trunk/src/VBox/VMM/VMMR0/VMMR0JmpA-x86.asm

    r20541 r20543  
    2424;*******************************************************************************
    2525%include "VBox/asmdefs.mac"
    26 %include "VMMInternal.mac"
     26%include "../VMMInternal.mac"
    2727%include "iprt/err.mac"
     28%include "VBox/param.mac"
    2829
    2930
    3031; For vmmR0LoggerWrapper. (The other architecture(s) use(s) C99 variadict macros.)
    3132extern NAME(RTLogLogger)
    32 
    33 %ifdef RT_OS_DARWIN
    34  %define VMM_R0_SWITCH_STACK
    35 %endif
    3633
    3734
     
    5855    ;
    5956    mov     edx, [esp + 4h]             ; pJmpBuf
    60     mov     [edx + VMMR0JMPBUF.ebx], ebx
    61     mov     [edx + VMMR0JMPBUF.esi], esi
    62     mov     [edx + VMMR0JMPBUF.edi], edi
    63     mov     [edx + VMMR0JMPBUF.ebp], ebp
    64     mov     eax, [esp]
    65     mov     [edx + VMMR0JMPBUF.eip], eax
     57    mov     [xDX + VMMR0JMPBUF.ebx], ebx
     58    mov     [xDX + VMMR0JMPBUF.esi], esi
     59    mov     [xDX + VMMR0JMPBUF.edi], edi
     60    mov     [xDX + VMMR0JMPBUF.ebp], ebp
     61    mov     xAX, [esp]
     62    mov     [xDX + VMMR0JMPBUF.eip], xAX
    6663    lea     ecx, [esp + 4]              ; (used in resume)
    67     mov     [edx + VMMR0JMPBUF.esp], ecx
     64    mov     [xDX + VMMR0JMPBUF.esp], ecx
    6865
    6966    ;
    7067    ; If we're not in a ring-3 call, call pfn and return.
    7168    ;
    72     test    byte [edx + VMMR0JMPBUF.fInRing3Call], 1
     69    test    byte [xDX + VMMR0JMPBUF.fInRing3Call], 1
    7370    jnz     .resume
    7471
     
    8380    mov     edx, esi
    8481    mov     edi, esi
    85     mov     ecx, 2048
     82    mov     ecx, VMM_STACK_SIZE / 4
    8683    mov     eax, 0eeeeeeeeh
    8784    repne stosd
    8885 %endif
    89     lea     esi, [esi + 8192 - 32]
     86    lea     esi, [esi + VMM_STACK_SIZE - 32]
    9087    mov     [esi + 1ch], dword 0deadbeefh ; Marker 1.
    9188    mov     [esi + 18h], ebx            ; Save pJmpBuf pointer.
     
    135132    ;
    136133.proper_return:
    137     mov     ebx, [edx + VMMR0JMPBUF.ebx]
    138     mov     esi, [edx + VMMR0JMPBUF.esi]
    139     mov     edi, [edx + VMMR0JMPBUF.edi]
    140     mov     ebp, [edx + VMMR0JMPBUF.ebp]
    141     mov     ecx, [edx + VMMR0JMPBUF.eip]
    142     and     dword [edx + VMMR0JMPBUF.eip], byte 0 ; used for valid check.
    143     mov     esp, [edx + VMMR0JMPBUF.esp]
    144     jmp     ecx
     134    mov     ebx, [xDX + VMMR0JMPBUF.ebx]
     135    mov     esi, [xDX + VMMR0JMPBUF.esi]
     136    mov     edi, [xDX + VMMR0JMPBUF.edi]
     137    mov     ebp, [xDX + VMMR0JMPBUF.ebp]
     138    mov     xCX, [xDX + VMMR0JMPBUF.eip]
     139    and     dword [xDX + VMMR0JMPBUF.eip], byte 0 ; used for valid check.
     140    mov     esp, [xDX + VMMR0JMPBUF.esp]
     141    jmp     xCX
    145142
    146143.entry_error:
     
    156153    ;
    157154.bad:
    158     and     dword [edx + VMMR0JMPBUF.eip], byte 0 ; used for valid check.
    159     mov     edi, [edx + VMMR0JMPBUF.edi]
    160     mov     esi, [edx + VMMR0JMPBUF.esi]
    161     mov     ebx, [edx + VMMR0JMPBUF.ebx]
     155    and     dword [xDX + VMMR0JMPBUF.eip], byte 0 ; used for valid check.
     156    mov     edi, [xDX + VMMR0JMPBUF.edi]
     157    mov     esi, [xDX + VMMR0JMPBUF.esi]
     158    mov     ebx, [xDX + VMMR0JMPBUF.ebx]
    162159    mov     eax, VERR_INTERNAL_ERROR_3    ; todo better return code!
    163160    ret
     
    169166    ; Sanity checks.
    170167%ifdef VMM_R0_SWITCH_STACK
    171     mov     eax, [edx + VMMR0JMPBUF.pvSavedStack]
     168    mov     eax, [xDX + VMMR0JMPBUF.pvSavedStack]
    172169 %ifdef RT_STRICT
    173170    cmp     dword [eax], 0eeeeeeeeh
    174171 %endif
    175     lea     eax, [eax + 8192 - 32]
     172    lea     eax, [eax + VMM_STACK_SIZE - 32]
    176173    cmp     dword [eax + 1ch], 0deadbeefh       ; Marker 1.
    177174    jne     .bad
     
    185182 %endif
    186183%else  ; !VMM_R0_SWITCH_STACK
    187     cmp     ecx, [edx + VMMR0JMPBUF.SpCheck]
     184    cmp     ecx, [xDX + VMMR0JMPBUF.SpCheck]
    188185    jne     .bad
    189186.espCheck_ok:
    190     mov     ecx, [edx + VMMR0JMPBUF.cbSavedStack]
    191     cmp     ecx, 8192
     187    mov     ecx, [xDX + VMMR0JMPBUF.cbSavedStack]
     188    cmp     ecx, VMM_STACK_SIZE
    192189    ja      .bad
    193190    test    ecx, 3
    194191    jnz     .bad
    195     mov     edi, [edx + VMMR0JMPBUF.esp]
    196     sub     edi, [edx + VMMR0JMPBUF.SpResume]
     192    mov     edi, [xDX + VMMR0JMPBUF.esp]
     193    sub     edi, [xDX + VMMR0JMPBUF.SpResume]
    197194    cmp     ecx, edi
    198195    jne     .bad
     
    201198%ifdef VMM_R0_SWITCH_STACK
    202199    ; Switch stack.
    203     mov     esp, [edx + VMMR0JMPBUF.SpResume]
     200    mov     esp, [xDX + VMMR0JMPBUF.SpResume]
    204201%else
    205202    ; Restore the stack.
    206     mov     ecx, [edx + VMMR0JMPBUF.cbSavedStack]
     203    mov     ecx, [xDX + VMMR0JMPBUF.cbSavedStack]
    207204    shr     ecx, 2
    208     mov     esi, [edx + VMMR0JMPBUF.pvSavedStack]
    209     mov     edi, [edx + VMMR0JMPBUF.SpResume]
     205    mov     esi, [xDX + VMMR0JMPBUF.pvSavedStack]
     206    mov     edi, [xDX + VMMR0JMPBUF.SpResume]
    210207    mov     esp, edi
    211208    rep movsd
    212209%endif ; !VMM_R0_SWITCH_STACK
    213     mov     byte [edx + VMMR0JMPBUF.fInRing3Call], 0
    214 
     210    mov     byte [xDX + VMMR0JMPBUF.fInRing3Call], 0
     211
     212    ;
    215213    ; Continue where we left off.
     214    ;
    216215%ifdef VBOX_STRICT
    217216    pop     eax                         ; magic
     
    262261    ; Is the jump buffer armed?
    263262    ;
    264     cmp     dword [edx + VMMR0JMPBUF.eip], byte 0
     263    cmp     dword [xDX + VMMR0JMPBUF.eip], byte 0
    265264    je      .nok
    266265
     
    268267    ; Sanity checks.
    269268    ;
    270     mov     edi, [edx + VMMR0JMPBUF.pvSavedStack]
     269    mov     edi, [xDX + VMMR0JMPBUF.pvSavedStack]
    271270    test    edi, edi                    ; darwin may set this to 0.
    272271    jz      .nok
    273     mov     [edx + VMMR0JMPBUF.SpResume], esp
     272    mov     [xDX + VMMR0JMPBUF.SpResume], esp
    274273%ifndef VMM_R0_SWITCH_STACK
    275274    mov     esi, esp
    276     mov     ecx, [edx + VMMR0JMPBUF.esp]
     275    mov     ecx, [xDX + VMMR0JMPBUF.esp]
    277276    sub     ecx, esi
    278277
    279278    ; two sanity checks on the size.
    280     cmp     ecx, 8192                   ; check max size.
     279    cmp     ecx, VMM_STACK_SIZE         ; check max size.
    281280    jnbe    .nok
    282281
     
    286285    test    ecx, 3                      ; check alignment
    287286    jnz     .nok
    288     mov     [edx + VMMR0JMPBUF.cbSavedStack], ecx
     287    mov     [xDX + VMMR0JMPBUF.cbSavedStack], ecx
    289288    shr     ecx, 2
    290289    rep movsd
     
    293292    ; Save ESP & EBP to enable stack dumps
    294293    mov     ecx, ebp
    295     mov     [edx + VMMR0JMPBUF.SavedEbp], ecx
     294    mov     [xDX + VMMR0JMPBUF.SavedEbp], ecx
    296295    sub     ecx, 4
    297     mov     [edx + VMMR0JMPBUF.SavedEsp], ecx
     296    mov     [xDX + VMMR0JMPBUF.SavedEsp], ecx
    298297
    299298    ; store the last pieces of info.
    300     mov     ecx, [edx + VMMR0JMPBUF.esp]
    301     mov     [edx + VMMR0JMPBUF.SpCheck], ecx
    302     mov     byte [edx + VMMR0JMPBUF.fInRing3Call], 1
     299    mov     ecx, [xDX + VMMR0JMPBUF.esp]
     300    mov     [xDX + VMMR0JMPBUF.SpCheck], ecx
     301    mov     byte [xDX + VMMR0JMPBUF.fInRing3Call], 1
    303302
    304303    ;
    305304    ; Do the long jump.
    306305    ;
    307     mov     ebx, [edx + VMMR0JMPBUF.ebx]
    308     mov     esi, [edx + VMMR0JMPBUF.esi]
    309     mov     edi, [edx + VMMR0JMPBUF.edi]
    310     mov     ebp, [edx + VMMR0JMPBUF.ebp]
    311     mov     ecx, [edx + VMMR0JMPBUF.eip]
    312     mov     esp, [edx + VMMR0JMPBUF.esp]
     306    mov     ebx, [xDX + VMMR0JMPBUF.ebx]
     307    mov     esi, [xDX + VMMR0JMPBUF.esi]
     308    mov     edi, [xDX + VMMR0JMPBUF.edi]
     309    mov     ebp, [xDX + VMMR0JMPBUF.ebp]
     310    mov     ecx, [xDX + VMMR0JMPBUF.eip]
     311    mov     esp, [xDX + VMMR0JMPBUF.esp]
    313312    jmp     ecx
    314313
  • trunk/src/VBox/VMM/testcase/Makefile.kmk

    r20541 r20543  
    3131endif
    3232ifdef VBOX_WITH_TESTCASES
    33  PROGRAMS  += tstCFGM tstSSM tstMMHyperHeap tstVMREQ tstMicro tstCompiler tstVMMR0CallHost-1
     33 PROGRAMS  += tstCFGM tstSSM tstMMHyperHeap tstVMREQ tstMicro tstCompiler tstVMMR0CallHost-1 tstVMMR0CallHost-2
    3434 ifneq ($(KBUILD_TARGET),l4)
    3535  PROGRAMS += tstAnimate
     
    158158tstVMMFork_LIBS         = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
    159159
    160 tstVMMR0CallHost-1_TEMPLATE = VBOXR3EXE
    161 tstVMMR0CallHost-1_INCS  = $(VBOX_PATH_VMM_SRC)
     160tstVMMR0CallHost-1_TEMPLATE = VBOXR3TSTEXE
     161tstVMMR0CallHost-1_DEFS = VMM_R0_NO_SWITCH_STACK
     162tstVMMR0CallHost-1_INCS = $(VBOX_PATH_VMM_SRC)
    162163tstVMMR0CallHost-1_SOURCES = \
    163164        tstVMMR0CallHost-1.cpp
     
    166167tstVMMR0CallHost-1_SOURCES.x86 = \
    167168        $(VBOX_PATH_VMM_SRC)/VMMR0/VMMR0JmpA-x86.asm
    168 tstVMMR0CallHost-1_LIBS  = $(LIB_VMM) $(LIB_REM) $(LIB_RUNTIME)
     169
     170tstVMMR0CallHost-2_EXTENDS = tstVMMR0CallHost-1
     171tstVMMR0CallHost-2_DEFS = VMM_R0_SWITCH_STACK
    169172
    170173tstVMREQ_TEMPLATE       = VBOXR3EXE
  • trunk/src/VBox/VMM/testcase/tstVMMR0CallHost-1.cpp

    r18848 r20543  
    3939*   Defined Constants And Macros                                               *
    4040*******************************************************************************/
    41 #ifdef RT_OS_DARWIN
    42 # define VMM_R0_SWITCH_STACK
     41#if !defined(VMM_R0_SWITCH_STACK) && !defined(VMM_R0_NO_SWITCH_STACK)
     42# error "VMM_R0_SWITCH_STACK or VMM_R0_NO_SWITCH_STACK has to be defined.
    4343#endif
    4444
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette