VirtualBox

Changeset 91806 in vbox


Ignore:
Timestamp:
Oct 18, 2021 8:32:39 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
147592
Message:

SUPDrv,tstVMMR0CallHost-2: Use the argument count from the function table for generating more optimal wrappers. Too bad we cannot make clang verify the counts, so adding a +2 for safety. bugref:10124

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/SUPR0StackWrapper.mac

    r91784 r91806  
    4949
    5050;;
     51; Number of parameters in GPRs and the spill area size.
     52%ifdef RT_ARCH_AMD64
     53 %ifdef ASM_CALL64_MSC
     54  %define SUPR0_GRP_PARAMS      4
     55  %define SUPR0_SPILL_AREA      4
     56 %else
     57  %define SUPR0_GRP_PARAMS      6
     58  %define SUPR0_SPILL_AREA      0
     59 %endif
     60%else
     61 %define SUPR0_GRP_PARAMS       0
     62 %define SUPR0_SPILL_AREA       0
     63%endif
     64
     65;;
    5166; Generic stack switching wrapper.
    5267;
    53 ; This supports up to 16 arguments on the stack in addition to the 6 GPR
    54 ; and 6 FPR arguments, which should be enough for most functions, even
    55 ; RTLogCreateExV.
     68; @param %1     The name
     69; @param %2     Number of arguments.
    5670;
    57 %macro SUPR0StackWrapperGeneric 1
     71%macro SUPR0StackWrapperGeneric 2
    5872BEGINCODE
    5973extern NAME(StkBack_ %+ %1)
     
    95109
    96110        ;
    97         ; Copy over 16 stack arguments (128 bytes).
     111        ; Copy over stack arguments.
    98112        ;
    99         ; We kind of ASSUME no function takes more arguments than that, and we ASSUME
    100         ; the code setting up the info makes sure rbp+88h won't underflow the stack.
     113        ; Note! We always copy 2-3 extra arguments (%2 + 2) just in case someone got
     114        ;       the argument count wrong.
    101115        ;
    102 
     116%if (%2 + 2) > SUPR0_GRP_PARAMS + 18
     117 %error too many parameters
     118 %fatal too many parameters
     119%endif
     120%if (%2 + 2) > SUPR0_GRP_PARAMS + 16
     121        push    qword [rbp + 98h]
     122        push    qword [rbp + 90h]
     123%endif
     124%if (%2 + 2) > SUPR0_GRP_PARAMS + 14
    103125        push    qword [rbp + 88h]
    104126        push    qword [rbp + 80h]
     127%endif
     128%if (%2 + 2) > SUPR0_GRP_PARAMS + 12
    105129        push    qword [rbp + 78h]
    106130        push    qword [rbp + 70h]
     131%endif
     132%if (%2 + 2) > SUPR0_GRP_PARAMS + 10
    107133        push    qword [rbp + 68h]
    108134        push    qword [rbp + 60h]
     135%endif
     136%if (%2 + 2) > SUPR0_GRP_PARAMS + 8
    109137        push    qword [rbp + 58h]
    110138        push    qword [rbp + 50h]
     139%endif
     140%if (%2 + 2) > SUPR0_GRP_PARAMS + 6
    111141        push    qword [rbp + 48h]
    112142        push    qword [rbp + 40h]
     143%endif
     144%if (%2 + 2) > SUPR0_GRP_PARAMS + 4
    113145        push    qword [rbp + 38h]
    114146        push    qword [rbp + 30h]
     147%endif
     148%if ((%2 + 2) > SUPR0_GRP_PARAMS + 2) || (SUPR0_SPILL_AREA > 2)
    115149        push    qword [rbp + 28h]
    116150        push    qword [rbp + 20h]
     151%endif
     152%if ((%2 + 2) > SUPR0_GRP_PARAMS)     || (SUPR0_SPILL_AREA > 0)
    117153        push    qword [rbp + 18h]
    118154        push    qword [rbp + 10h]
     155%endif
    119156
    120157        call    NAME(StkBack_ %+ %1)
  • trunk/src/VBox/HostDrivers/Support/SUPR0-asm.sed

    r91801 r91806  
    3737# We are only interested in the SUPEXP_STK_BACK lines.
    3838/^ *SUPEXP_STK_BACKF*(/!d
    39 s/^ *SUPEXP_STK_BACKF*( *\([0-9][0-9]*\) *, *\([^)][^)]*\)),.*$/\/\/ ##### BEGINFILE \"StkBack_\2.asm\"\n%include "VBox\/SUPR0StackWrapper.mac"\nSUPR0StackWrapperGeneric \2\n\/\/ ##### ENDFILE/
     39s/^ *SUPEXP_STK_BACKF*( *\([0-9][0-9]*\) *, *\([^)][^)]*\)),.*$/\/\/ ##### BEGINFILE \"StkBack_\2.asm\"\n%include "VBox\/SUPR0StackWrapper.mac"\nSUPR0StackWrapperGeneric \2, \1\n\/\/ ##### ENDFILE/
    4040b end
    4141
  • trunk/src/VBox/VMM/VMMR0/VMMR0JmpA-amd64.asm

    r91775 r91806  
    167167
    168168    ; Switch stack!
    169   %ifndef WITHOUT_SUPR0STACKINFO
    170     lea     rsp, [r15 - 16*8 + SUPR0STACKINFO_size] ; Make sure the generic wrapper doesn't crash when moving 16 args.
     169  %ifdef ASM_CALL64_MSC
     170    lea     rsp, [r15 - 20h]
    171171  %else
    172    %ifdef ASM_CALL64_MSC
    173     lea     rsp, [r15 - 20h]
    174    %else
    175172    mov     rsp, r15
    176    %endif
    177173  %endif
    178174 %endif ; VMM_R0_SWITCH_STACK
  • trunk/src/VBox/VMM/testcase/tstVMMR0CallHost-1.cpp

    r91775 r91806  
    177177 */
    178178RT_C_DECLS_BEGIN
    179 DECLCALLBACK(int) tstWrapped1(        PVMMR0JMPBUF pJmp, uintptr_t u1, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5,
    180                                       uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9);
    181 DECLCALLBACK(int) StkBack_tstWrapped1(PVMMR0JMPBUF pJmp, uintptr_t u1, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5,
    182                                       uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9);
     179DECLCALLBACK(int) tstWrapped4(         PVMMR0JMPBUF pJmp, uintptr_t u2, uintptr_t u3,  uintptr_t u4);
     180DECLCALLBACK(int) StkBack_tstWrapped4( PVMMR0JMPBUF pJmp, uintptr_t u2, uintptr_t u3,  uintptr_t u4);
     181DECLCALLBACK(int) tstWrapped5(         PVMMR0JMPBUF pJmp, uintptr_t u2, uintptr_t u3,  uintptr_t u4, uintptr_t u5);
     182DECLCALLBACK(int) StkBack_tstWrapped5( PVMMR0JMPBUF pJmp, uintptr_t u2, uintptr_t u3,  uintptr_t u4, uintptr_t u5);
     183DECLCALLBACK(int) tstWrapped6(         PVMMR0JMPBUF pJmp, uintptr_t u2, uintptr_t u3,  uintptr_t u4, uintptr_t u5, uintptr_t u6);
     184DECLCALLBACK(int) StkBack_tstWrapped6( PVMMR0JMPBUF pJmp, uintptr_t u2, uintptr_t u3,  uintptr_t u4, uintptr_t u5, uintptr_t u6);
     185DECLCALLBACK(int) tstWrapped7(         PVMMR0JMPBUF pJmp, uintptr_t u2, uintptr_t u3,  uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7);
     186DECLCALLBACK(int) StkBack_tstWrapped7( PVMMR0JMPBUF pJmp, uintptr_t u2, uintptr_t u3,  uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7);
     187DECLCALLBACK(int) tstWrapped8(         PVMMR0JMPBUF pJmp, uintptr_t u2, uintptr_t u3,  uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8);
     188DECLCALLBACK(int) StkBack_tstWrapped8( PVMMR0JMPBUF pJmp, uintptr_t u2, uintptr_t u3,  uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8);
     189DECLCALLBACK(int) tstWrapped9(         PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9);
     190DECLCALLBACK(int) StkBack_tstWrapped9( PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9);
     191DECLCALLBACK(int) tstWrapped10(        PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9, uintptr_t u10);
     192DECLCALLBACK(int) StkBack_tstWrapped10(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9, uintptr_t u10);
     193DECLCALLBACK(int) tstWrapped16(        PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9, uintptr_t u10, uintptr_t u11, uintptr_t u12, uintptr_t u13, uintptr_t u14, uintptr_t u15, uintptr_t u16);
     194DECLCALLBACK(int) StkBack_tstWrapped16(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9, uintptr_t u10, uintptr_t u11, uintptr_t u12, uintptr_t u13, uintptr_t u14, uintptr_t u15, uintptr_t u16);
     195DECLCALLBACK(int) tstWrapped20(        PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9, uintptr_t u10, uintptr_t u11, uintptr_t u12, uintptr_t u13, uintptr_t u14, uintptr_t u15, uintptr_t u16, uintptr_t u17, uintptr_t u18, uintptr_t u19, uintptr_t u20);
     196DECLCALLBACK(int) StkBack_tstWrapped20(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9, uintptr_t u10, uintptr_t u11, uintptr_t u12, uintptr_t u13, uintptr_t u14, uintptr_t u15, uintptr_t u16, uintptr_t u17, uintptr_t u18, uintptr_t u19, uintptr_t u20);
     197
    183198DECLCALLBACK(int) tstWrappedThin(PVMMR0JMPBUF pJmp);
    184199DECLCALLBACK(int) StkBack_tstWrappedThin(PVMMR0JMPBUF pJmp);
     
    186201
    187202
    188 DECLCALLBACK(int) StkBack_tstWrapped1(PVMMR0JMPBUF pJmp, uintptr_t u1, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5,
    189                                       uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9)
    190 {
    191     RTTESTI_CHECK_RET(pJmp == &g_Jmp, -1);
    192     RTTESTI_CHECK_RET(u1 == ~(uintptr_t)1U, -2);
    193     RTTESTI_CHECK_RET(u2 == ~(uintptr_t)2U, -3);
    194     RTTESTI_CHECK_RET(u3 == ~(uintptr_t)3U, -4);
    195     RTTESTI_CHECK_RET(u4 == ~(uintptr_t)4U, -5);
    196     RTTESTI_CHECK_RET(u5 == ~(uintptr_t)5U, -6);
    197     RTTESTI_CHECK_RET(u6 == ~(uintptr_t)6U, -7);
    198     RTTESTI_CHECK_RET(u7 == ~(uintptr_t)7U, -8);
    199     RTTESTI_CHECK_RET(u8 == ~(uintptr_t)8U, -9);
    200     RTTESTI_CHECK_RET(u9 == ~(uintptr_t)9U, -10);
     203
     204DECLCALLBACK(int) StkBack_tstWrapped4(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4)
     205{
     206    RTTESTI_CHECK_RET(pJmp == &g_Jmp, -1);
     207    RTTESTI_CHECK_RET(u2 == (uintptr_t)2U, -2);
     208    RTTESTI_CHECK_RET(u3 == (uintptr_t)3U, -3);
     209    RTTESTI_CHECK_RET(u4 == (uintptr_t)4U, -4);
     210
     211    void *pv = alloca(32);
     212    memset(pv, 'a', 32);
     213    RTTESTI_CHECK_RET((uintptr_t)pv - (uintptr_t)g_Jmp.pvSavedStack > VMM_STACK_SIZE, -11);
     214
     215    return 42;
     216}
     217
     218
     219DECLCALLBACK(int) StkBack_tstWrapped5(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5)
     220{
     221    RTTESTI_CHECK_RET(pJmp == &g_Jmp, -1);
     222    RTTESTI_CHECK_RET(u2 == ~(uintptr_t)2U, -2);
     223    RTTESTI_CHECK_RET(u3 == ~(uintptr_t)3U, -3);
     224    RTTESTI_CHECK_RET(u4 == ~(uintptr_t)4U, -4);
     225    RTTESTI_CHECK_RET(u5 == ~(uintptr_t)5U, -5);
     226
     227    void *pv = alloca(32);
     228    memset(pv, 'a', 32);
     229    RTTESTI_CHECK_RET((uintptr_t)pv - (uintptr_t)g_Jmp.pvSavedStack > VMM_STACK_SIZE, -11);
     230
     231    return 42;
     232}
     233
     234
     235DECLCALLBACK(int) StkBack_tstWrapped6(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6)
     236{
     237    RTTESTI_CHECK_RET(pJmp == &g_Jmp, -1);
     238    RTTESTI_CHECK_RET(u2 ==  (uintptr_t)2U, -2);
     239    RTTESTI_CHECK_RET(u3 ==  (uintptr_t)3U, -3);
     240    RTTESTI_CHECK_RET(u4 ==  (uintptr_t)4U, -4);
     241    RTTESTI_CHECK_RET(u5 ==  (uintptr_t)5U, -5);
     242    RTTESTI_CHECK_RET(u6 ==  (uintptr_t)6U, -6);
     243
     244    void *pv = alloca(32);
     245    memset(pv, 'a', 32);
     246    RTTESTI_CHECK_RET((uintptr_t)pv - (uintptr_t)g_Jmp.pvSavedStack > VMM_STACK_SIZE, -11);
     247
     248    return 42;
     249}
     250
     251
     252DECLCALLBACK(int) StkBack_tstWrapped7(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7)
     253{
     254    RTTESTI_CHECK_RET(pJmp == &g_Jmp, -1);
     255    RTTESTI_CHECK_RET(u2 == ~(uintptr_t)2U, -2);
     256    RTTESTI_CHECK_RET(u3 == ~(uintptr_t)3U, -3);
     257    RTTESTI_CHECK_RET(u4 == ~(uintptr_t)4U, -4);
     258    RTTESTI_CHECK_RET(u5 == ~(uintptr_t)5U, -5);
     259    RTTESTI_CHECK_RET(u6 == ~(uintptr_t)6U, -6);
     260    RTTESTI_CHECK_RET(u7 == ~(uintptr_t)7U, -7);
     261
     262    void *pv = alloca(32);
     263    memset(pv, 'a', 32);
     264    RTTESTI_CHECK_RET((uintptr_t)pv - (uintptr_t)g_Jmp.pvSavedStack > VMM_STACK_SIZE, -11);
     265
     266    return 42;
     267}
     268
     269
     270DECLCALLBACK(int) StkBack_tstWrapped8(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8)
     271{
     272    RTTESTI_CHECK_RET(pJmp == &g_Jmp, -1);
     273    RTTESTI_CHECK_RET(u2 ==  (uintptr_t)2U, -2);
     274    RTTESTI_CHECK_RET(u3 ==  (uintptr_t)3U, -3);
     275    RTTESTI_CHECK_RET(u4 ==  (uintptr_t)4U, -4);
     276    RTTESTI_CHECK_RET(u5 ==  (uintptr_t)5U, -5);
     277    RTTESTI_CHECK_RET(u6 ==  (uintptr_t)6U, -6);
     278    RTTESTI_CHECK_RET(u7 ==  (uintptr_t)7U, -7);
     279    RTTESTI_CHECK_RET(u8 ==  (uintptr_t)8U, -8);
     280
     281    void *pv = alloca(32);
     282    memset(pv, 'a', 32);
     283    RTTESTI_CHECK_RET((uintptr_t)pv - (uintptr_t)g_Jmp.pvSavedStack > VMM_STACK_SIZE, -11);
     284
     285    return 42;
     286}
     287
     288DECLCALLBACK(int) StkBack_tstWrapped9(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9)
     289{
     290    RTTESTI_CHECK_RET(pJmp == &g_Jmp, -1);
     291    RTTESTI_CHECK_RET(u2 == ~(uintptr_t)2U, -2);
     292    RTTESTI_CHECK_RET(u3 == ~(uintptr_t)3U, -3);
     293    RTTESTI_CHECK_RET(u4 == ~(uintptr_t)4U, -4);
     294    RTTESTI_CHECK_RET(u5 == ~(uintptr_t)5U, -5);
     295    RTTESTI_CHECK_RET(u6 == ~(uintptr_t)6U, -6);
     296    RTTESTI_CHECK_RET(u7 == ~(uintptr_t)7U, -7);
     297    RTTESTI_CHECK_RET(u8 == ~(uintptr_t)8U, -8);
     298    RTTESTI_CHECK_RET(u9 == ~(uintptr_t)9U, -9);
     299
     300    void *pv = alloca(32);
     301    memset(pv, 'a', 32);
     302    RTTESTI_CHECK_RET((uintptr_t)pv - (uintptr_t)g_Jmp.pvSavedStack > VMM_STACK_SIZE, -11);
     303
     304    return 42;
     305}
     306
     307
     308DECLCALLBACK(int) StkBack_tstWrapped10(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9, uintptr_t u10)
     309{
     310    RTTESTI_CHECK_RET(pJmp == &g_Jmp, -1);
     311    RTTESTI_CHECK_RET(u2 ==  (uintptr_t)2U, -2);
     312    RTTESTI_CHECK_RET(u3 ==  (uintptr_t)3U, -3);
     313    RTTESTI_CHECK_RET(u4 ==  (uintptr_t)4U, -4);
     314    RTTESTI_CHECK_RET(u5 ==  (uintptr_t)5U, -5);
     315    RTTESTI_CHECK_RET(u6 ==  (uintptr_t)6U, -6);
     316    RTTESTI_CHECK_RET(u7 ==  (uintptr_t)7U, -7);
     317    RTTESTI_CHECK_RET(u8 ==  (uintptr_t)8U, -8);
     318    RTTESTI_CHECK_RET(u9 ==  (uintptr_t)9U, -9);
     319    RTTESTI_CHECK_RET(u10 == (uintptr_t)10U, -10);
     320
     321    void *pv = alloca(32);
     322    memset(pv, 'a', 32);
     323    RTTESTI_CHECK_RET((uintptr_t)pv - (uintptr_t)g_Jmp.pvSavedStack > VMM_STACK_SIZE, -11);
     324
     325    return 42;
     326}
     327
     328
     329DECLCALLBACK(int) StkBack_tstWrapped16(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9, uintptr_t u10, uintptr_t u11, uintptr_t u12, uintptr_t u13, uintptr_t u14, uintptr_t u15, uintptr_t u16)
     330{
     331    RTTESTI_CHECK_RET(pJmp == &g_Jmp, -1);
     332    RTTESTI_CHECK_RET(u2 ==  (uintptr_t)2U, -2);
     333    RTTESTI_CHECK_RET(u3 ==  (uintptr_t)3U, -3);
     334    RTTESTI_CHECK_RET(u4 ==  (uintptr_t)4U, -4);
     335    RTTESTI_CHECK_RET(u5 ==  (uintptr_t)5U, -5);
     336    RTTESTI_CHECK_RET(u6 ==  (uintptr_t)6U, -6);
     337    RTTESTI_CHECK_RET(u7 ==  (uintptr_t)7U, -7);
     338    RTTESTI_CHECK_RET(u8 ==  (uintptr_t)8U, -8);
     339    RTTESTI_CHECK_RET(u9 ==  (uintptr_t)9U, -9);
     340    RTTESTI_CHECK_RET(u10 == (uintptr_t)10U, -10);
     341    RTTESTI_CHECK_RET(u11 == (uintptr_t)11U, -11);
     342    RTTESTI_CHECK_RET(u12 == (uintptr_t)12U, -12);
     343    RTTESTI_CHECK_RET(u13 == (uintptr_t)13U, -13);
     344    RTTESTI_CHECK_RET(u14 == (uintptr_t)14U, -14);
     345    RTTESTI_CHECK_RET(u15 == (uintptr_t)15U, -15);
     346    RTTESTI_CHECK_RET(u16 == (uintptr_t)16U, -16);
     347
     348    void *pv = alloca(32);
     349    memset(pv, 'a', 32);
     350    RTTESTI_CHECK_RET((uintptr_t)pv - (uintptr_t)g_Jmp.pvSavedStack > VMM_STACK_SIZE, -11);
     351
     352    return 42;
     353}
     354
     355
     356DECLCALLBACK(int) StkBack_tstWrapped20(PVMMR0JMPBUF pJmp, uintptr_t u2,  uintptr_t u3, uintptr_t u4, uintptr_t u5, uintptr_t u6, uintptr_t u7, uintptr_t u8, uintptr_t u9, uintptr_t u10, uintptr_t u11, uintptr_t u12, uintptr_t u13, uintptr_t u14, uintptr_t u15, uintptr_t u16, uintptr_t u17, uintptr_t u18, uintptr_t u19, uintptr_t u20)
     357{
     358    RTTESTI_CHECK_RET(pJmp == &g_Jmp, -1);
     359    RTTESTI_CHECK_RET(u2 ==  (uintptr_t)2U, -2);
     360    RTTESTI_CHECK_RET(u3 ==  (uintptr_t)3U, -3);
     361    RTTESTI_CHECK_RET(u4 ==  (uintptr_t)4U, -4);
     362    RTTESTI_CHECK_RET(u5 ==  (uintptr_t)5U, -5);
     363    RTTESTI_CHECK_RET(u6 ==  (uintptr_t)6U, -6);
     364    RTTESTI_CHECK_RET(u7 ==  (uintptr_t)7U, -7);
     365    RTTESTI_CHECK_RET(u8 ==  (uintptr_t)8U, -8);
     366    RTTESTI_CHECK_RET(u9 ==  (uintptr_t)9U, -9);
     367    RTTESTI_CHECK_RET(u10 == (uintptr_t)10U, -10);
     368    RTTESTI_CHECK_RET(u11 == (uintptr_t)11U, -11);
     369    RTTESTI_CHECK_RET(u12 == (uintptr_t)12U, -12);
     370    RTTESTI_CHECK_RET(u13 == (uintptr_t)13U, -13);
     371    RTTESTI_CHECK_RET(u14 == (uintptr_t)14U, -14);
     372    RTTESTI_CHECK_RET(u15 == (uintptr_t)15U, -15);
     373    RTTESTI_CHECK_RET(u16 == (uintptr_t)16U, -16);
     374    RTTESTI_CHECK_RET(u17 == (uintptr_t)17U, -17);
     375    RTTESTI_CHECK_RET(u18 == (uintptr_t)18U, -18);
     376    RTTESTI_CHECK_RET(u19 == (uintptr_t)19U, -19);
     377    RTTESTI_CHECK_RET(u20 == (uintptr_t)20U, -20);
    201378
    202379    void *pv = alloca(32);
     
    217394    RTTESTI_CHECK_RET((uintptr_t)pv - (uintptr_t)g_Jmp.pvSavedStack < VMM_STACK_SIZE, -22);
    218395
    219     int rc = tstWrapped1(&g_Jmp,
    220                          ~(uintptr_t)1U,
    221                          ~(uintptr_t)2U,
    222                          ~(uintptr_t)3U,
    223                          ~(uintptr_t)4U,
    224                          ~(uintptr_t)5U,
    225                          ~(uintptr_t)6U,
    226                          ~(uintptr_t)7U,
    227                          ~(uintptr_t)8U,
    228                          ~(uintptr_t)9U);
     396    int rc;
     397    rc = tstWrapped4(&g_Jmp,  (uintptr_t)2U,  (uintptr_t)3U,  (uintptr_t)4U);
     398    RTTESTI_CHECK_RET(rc == 42, -23);
     399
     400    rc = tstWrapped5(&g_Jmp, ~(uintptr_t)2U, ~(uintptr_t)3U, ~(uintptr_t)4U, ~(uintptr_t)5U);
     401    RTTESTI_CHECK_RET(rc == 42, -23);
     402
     403    rc = tstWrapped6(&g_Jmp,  (uintptr_t)2U,  (uintptr_t)3U,  (uintptr_t)4U,  (uintptr_t)5U,  (uintptr_t)6U);
     404    RTTESTI_CHECK_RET(rc == 42, -23);
     405
     406    rc = tstWrapped7(&g_Jmp, ~(uintptr_t)2U, ~(uintptr_t)3U, ~(uintptr_t)4U, ~(uintptr_t)5U, ~(uintptr_t)6U, ~(uintptr_t)7U);
     407    RTTESTI_CHECK_RET(rc == 42, -23);
     408
     409    rc = tstWrapped8(&g_Jmp,  (uintptr_t)2U,  (uintptr_t)3U,  (uintptr_t)4U,  (uintptr_t)5U,  (uintptr_t)6U,  (uintptr_t)7U,  (uintptr_t)8U);
     410    RTTESTI_CHECK_RET(rc == 42, -23);
     411
     412    rc = tstWrapped9(&g_Jmp, ~(uintptr_t)2U, ~(uintptr_t)3U, ~(uintptr_t)4U, ~(uintptr_t)5U, ~(uintptr_t)6U, ~(uintptr_t)7U, ~(uintptr_t)8U, ~(uintptr_t)9U);
     413    RTTESTI_CHECK_RET(rc == 42, -23);
     414
     415    rc = tstWrapped10(&g_Jmp, (uintptr_t)2U,  (uintptr_t)3U,  (uintptr_t)4U,  (uintptr_t)5U,  (uintptr_t)6U,  (uintptr_t)7U,  (uintptr_t)8U,  (uintptr_t)9U,  (uintptr_t)10);
     416    RTTESTI_CHECK_RET(rc == 42, -23);
     417
     418    rc = tstWrapped16(&g_Jmp, (uintptr_t)2U,  (uintptr_t)3U,  (uintptr_t)4U,  (uintptr_t)5U,  (uintptr_t)6U,  (uintptr_t)7U,  (uintptr_t)8U,  (uintptr_t)9U,  (uintptr_t)10,  (uintptr_t)11,  (uintptr_t)12,  (uintptr_t)13,  (uintptr_t)14,  (uintptr_t)15,  (uintptr_t)16);
     419    RTTESTI_CHECK_RET(rc == 42, -23);
     420
     421    rc = tstWrapped20(&g_Jmp, (uintptr_t)2U,  (uintptr_t)3U,  (uintptr_t)4U,  (uintptr_t)5U,  (uintptr_t)6U,  (uintptr_t)7U,  (uintptr_t)8U,  (uintptr_t)9U,  (uintptr_t)10,  (uintptr_t)11,  (uintptr_t)12,  (uintptr_t)13,  (uintptr_t)14,  (uintptr_t)15,  (uintptr_t)16,  (uintptr_t)17,  (uintptr_t)18,  (uintptr_t)19,  (uintptr_t)20);
    229422    RTTESTI_CHECK_RET(rc == 42, -23);
    230423    return rc;
  • trunk/src/VBox/VMM/testcase/tstVMMR0CallHost-2A.asm

    r91777 r91806  
    55
    66;
    7 ; Copyright (C) 2006-2020 Oracle Corporation
     7; Copyright (C) 2006-2021 Oracle Corporation
    88;
    99; This file is part of VirtualBox Open Source Edition (OSE), as
     
    1818%include "VBox/SUPR0StackWrapper.mac"
    1919
    20 SUPR0StackWrapperGeneric tstWrapped1
    21 SUPR0StackWrapperGeneric tstWrappedThin
     20SUPR0StackWrapperGeneric tstWrappedThin, 1
     21SUPR0StackWrapperGeneric tstWrapped4,    4
     22SUPR0StackWrapperGeneric tstWrapped5,    5
     23SUPR0StackWrapperGeneric tstWrapped6,    6
     24SUPR0StackWrapperGeneric tstWrapped7,    7
     25SUPR0StackWrapperGeneric tstWrapped8,    8
     26SUPR0StackWrapperGeneric tstWrapped9,    9
     27SUPR0StackWrapperGeneric tstWrapped10,   10
     28SUPR0StackWrapperGeneric tstWrapped16,   16
     29SUPR0StackWrapperGeneric tstWrapped20,   20
    2230
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