VirtualBox

Changeset 3581 in vbox for trunk/src/recompiler


Ignore:
Timestamp:
Jul 12, 2007 1:41:39 PM (18 years ago)
Author:
vboxsync
Message:

Fixed incorrect/missing shadow space reservations in WrapGCC2MSC0Int, WrapGCC2MSC1Int and WrapGCC2MSC0Int. Added generic entry/exit logging option.

Location:
trunk/src/recompiler
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/recompiler/VBoxREMWrapper.cpp

    r2981 r3581  
    12211221
    12221222
     1223
     1224/**
     1225 * Entry logger function.
     1226 *
     1227 * @param   pDesc       The description.
     1228 */
     1229DECLASM(void) remLogEntry(PCREMFNDESC pDesc)
     1230{
     1231    RTPrintf("calling %s\n", pDesc->pszName);
     1232}
     1233
     1234
     1235/**
     1236 * Exit logger function.
     1237 *
     1238 * @param   pDesc       The description.
     1239 * @param   pvRet       The return code.
     1240 */
     1241DECLASM(void) remLogExit(PCREMFNDESC pDesc, void *pvRet)
     1242{
     1243    RTPrintf("returning %p from %s\n", pvRet, pDesc->pszName);
     1244}
     1245
     1246
    12231247/**
    12241248 * Fixes export glue.
     
    12591283            continue;
    12601284        }
     1285        if (cb >= 8 && *u.pu64 == UINT64_C(0xdead00010001dead))
     1286        {
     1287            /* 64-bit address to the descriptor. */
     1288            *u.pu64++ = (uintptr_t)pDesc;
     1289            cb -= 8;
     1290            continue;
     1291        }
     1292        if (cb >= 8 && *u.pu64 == UINT64_C(0xdead00020002dead))
     1293        {
     1294            /* 64-bit address to the entry logger function. */
     1295            *u.pu64++ = (uintptr_t)remLogEntry;
     1296            cb -= 8;
     1297            continue;
     1298        }
     1299        if (cb >= 8 && *u.pu64 == UINT64_C(0xdead00030003dead))
     1300        {
     1301            /* 64-bit address to the entry logger function. */
     1302            *u.pu64++ = (uintptr_t)remLogExit;
     1303            cb -= 8;
     1304            continue;
     1305        }
    12611306
    12621307        /* move on. */
     
    13011346            /* 64-bit address to the real function. */
    13021347            *u.pu64++ = (uintptr_t)pDesc->pv;
     1348            cb -= 8;
     1349            continue;
     1350        }
     1351        if (cb >= 8 && *u.pu64 == UINT64_C(0xdead00010001dead))
     1352        {
     1353            /* 64-bit address to the descriptor. */
     1354            *u.pu64++ = (uintptr_t)pDesc;
     1355            cb -= 8;
     1356            continue;
     1357        }
     1358        if (cb >= 8 && *u.pu64 == UINT64_C(0xdead00020002dead))
     1359        {
     1360            /* 64-bit address to the entry logger function. */
     1361            *u.pu64++ = (uintptr_t)remLogEntry;
     1362            cb -= 8;
     1363            continue;
     1364        }
     1365        if (cb >= 8 && *u.pu64 == UINT64_C(0xdead00030003dead))
     1366        {
     1367            /* 64-bit address to the entry logger function. */
     1368            *u.pu64++ = (uintptr_t)remLogExit;
    13031369            cb -= 8;
    13041370            continue;
  • trunk/src/recompiler/VBoxREMWrapperA.asm

    r2988 r3581  
    2222%include "iprt/asmdefs.mac"
    2323
     24;%define ENTRY_LOGGING   1
     25;%define EXIT_LOGGING    1
     26
     27
     28%ifdef __AMD64__
     29 ;;
     30 ; 64-bit pushad
     31 %macro MY_PUSHAQ 0
     32    push    rax
     33    push    rbx
     34    push    rcx
     35    push    rdx
     36    push    rsi
     37    push    rdi
     38    push    rbp
     39    push    r8
     40    push    r9
     41    push    r10
     42    push    r11
     43    push    r12
     44    push    r13
     45    push    r14
     46    push    r15
     47 %endmacro
     48
     49 ;;
     50 ; 64-bit popad
     51 %macro MY_POPAQ 0
     52    pop     r15
     53    pop     r14
     54    pop     r13
     55    pop     r12
     56    pop     r11
     57    pop     r10
     58    pop     r9
     59    pop     r8
     60    pop     rbp
     61    pop     rdi
     62    pop     rsi
     63    pop     rdx
     64    pop     rcx
     65    pop     rbx
     66    pop     rax
     67 %endmacro
     68
     69 ;;
     70 ; Entry logging
     71 %ifdef ENTRY_LOGGING
     72  %macro LOG_ENTRY 0
     73    MY_PUSHAQ
     74    push    rbp
     75    mov     rbp, rsp
     76    and     rsp, ~0fh
     77    sub     rsp, 20h                    ; shadow space
     78
     79   %ifdef __WIN__
     80    mov     rcx, 0xdead00010001dead
     81   %else
     82    mov     rdi, 0xdead00010001dead
     83   %endif
     84    mov     rax, 0xdead00020002dead
     85    call    rax
     86
     87    leave
     88    MY_POPAQ
     89  %endmacro
     90 %else
     91  %define LOG_ENTRY
     92 %endif
     93
     94 ;;
     95 ; Exit logging
     96 %ifdef EXIT_LOGGING
     97  %macro LOG_EXIT 0
     98    MY_PUSHAQ
     99    push    rbp
     100    mov     rbp, rsp
     101    and     rsp, ~0fh
     102    sub     rsp, 20h                    ; shadow space
     103
     104   %ifdef __WIN__
     105    mov     rdx, rax
     106    mov     rcx, 0xdead00010001dead
     107   %else
     108    mov     rsi, eax
     109    mov     rdi, 0xdead00010001dead
     110   %endif
     111    mov     rax, 0xdead00030003dead
     112    call    rax
     113
     114    leave
     115    MY_POPAQ
     116  %endmacro
     117 %else
     118  %define LOG_EXIT
     119 %endif
     120
     121%else
     122 %define LOG_ENTRY
     123 %define LOG_EXIT
     124%endif
    24125
    25126
     
    31132
    32133BEGINPROC WrapGCC2MSC0Int
    33 %ifdef USE_DIRECT_CALLS
    34     jmp     $+5+0deadbeefh
    35 %else
    36     mov     rax, 0xdeadf00df00ddead
    37     jmp     rax
    38 %endif
     134    LOG_ENTRY
     135    push    rbp
     136    mov     rbp, rsp
     137    sub     rsp, 20h
     138
     139%ifdef USE_DIRECT_CALLS
     140    call    $+5+0deadbeefh
     141%else
     142    mov     rax, 0xdeadf00df00ddead
     143    call    rax
     144%endif
     145
     146    leave
     147    LOG_EXIT
     148    ret
    39149ENDPROC WrapGCC2MSC0Int
    40150
    41151
    42152BEGINPROC WrapGCC2MSC1Int
    43     push    rbp
    44     mov     rbp, rsp
    45     sub     rsp, 10h
    46 
    47     mov     rcx, rdi
    48 %ifdef USE_DIRECT_CALLS
    49     call    $+5+0deadbeefh
    50 %else
    51     mov     rax, 0xdeadf00df00ddead
    52     call    rax
    53 %endif
    54 
    55     leave
     153    LOG_ENTRY
     154    push    rbp
     155    mov     rbp, rsp
     156    sub     rsp, 20h
     157
     158    mov     rcx, rdi
     159%ifdef USE_DIRECT_CALLS
     160    call    $+5+0deadbeefh
     161%else
     162    mov     rax, 0xdeadf00df00ddead
     163    call    rax
     164%endif
     165
     166    leave
     167    LOG_EXIT
    56168    ret
    57169ENDPROC WrapGCC2MSC1Int
     
    59171
    60172BEGINPROC WrapGCC2MSC2Int
    61     push    rbp
    62     mov     rbp, rsp
    63     sub     rsp, 10h
    64 
    65     mov     rdx, rsi
    66     mov     rcx, rdi
    67 %ifdef USE_DIRECT_CALLS
    68     call    $+5+0deadbeefh
    69 %else
    70     mov     rax, 0xdeadf00df00ddead
    71     call    rax
    72 %endif
    73 
    74     leave
     173    LOG_ENTRY
     174    push    rbp
     175    mov     rbp, rsp
     176    sub     rsp, 20h
     177
     178    mov     rdx, rsi
     179    mov     rcx, rdi
     180%ifdef USE_DIRECT_CALLS
     181    call    $+5+0deadbeefh
     182%else
     183    mov     rax, 0xdeadf00df00ddead
     184    call    rax
     185%endif
     186
     187    leave
     188    LOG_EXIT
    75189    ret
    76190ENDPROC WrapGCC2MSC2Int
     
    78192
    79193BEGINPROC WrapGCC2MSC3Int
    80     push    rbp
    81     mov     rbp, rsp
    82     sub     rsp, 20h
    83 
    84     mov     r8, rdx
    85     mov     rdx, rsi
    86     mov     rcx, rdi
    87 %ifdef USE_DIRECT_CALLS
    88     call    $+5+0deadbeefh
    89 %else
    90     mov     rax, 0xdeadf00df00ddead
    91     call    rax
    92 %endif
    93 
    94     leave
     194    LOG_ENTRY
     195    push    rbp
     196    mov     rbp, rsp
     197    sub     rsp, 20h
     198
     199    mov     r8, rdx
     200    mov     rdx, rsi
     201    mov     rcx, rdi
     202%ifdef USE_DIRECT_CALLS
     203    call    $+5+0deadbeefh
     204%else
     205    mov     rax, 0xdeadf00df00ddead
     206    call    rax
     207%endif
     208
     209    leave
     210    LOG_EXIT
    95211    ret
    96212ENDPROC WrapGCC2MSC3Int
     
    98214
    99215BEGINPROC WrapGCC2MSC4Int
    100     push    rbp
    101     mov     rbp, rsp
    102     sub     rsp, 20h
    103 
    104     mov     r9, rcx
    105     mov     r8, rdx
    106     mov     rdx, rsi
    107     mov     rcx, rdi
    108 %ifdef USE_DIRECT_CALLS
    109     call    $+5+0deadbeefh
    110 %else
    111     mov     rax, 0xdeadf00df00ddead
    112     call    rax
    113 %endif
    114 
    115     leave
     216    LOG_ENTRY
     217    push    rbp
     218    mov     rbp, rsp
     219    sub     rsp, 20h
     220
     221    mov     r9, rcx
     222    mov     r8, rdx
     223    mov     rdx, rsi
     224    mov     rcx, rdi
     225%ifdef USE_DIRECT_CALLS
     226    call    $+5+0deadbeefh
     227%else
     228    mov     rax, 0xdeadf00df00ddead
     229    call    rax
     230%endif
     231
     232    leave
     233    LOG_EXIT
    116234    ret
    117235ENDPROC WrapGCC2MSC4Int
     
    119237
    120238BEGINPROC WrapGCC2MSC5Int
     239    LOG_ENTRY
    121240    push    rbp
    122241    mov     rbp, rsp
     
    136255
    137256    leave
     257    LOG_EXIT
    138258    ret
    139259ENDPROC WrapGCC2MSC5Int
     
    141261
    142262BEGINPROC WrapGCC2MSC6Int
     263    LOG_ENTRY
    143264    push    rbp
    144265    mov     rbp, rsp
     
    159280
    160281    leave
     282    LOG_EXIT
    161283    ret
    162284ENDPROC WrapGCC2MSC6Int
     
    164286
    165287BEGINPROC WrapGCC2MSC7Int
     288    LOG_ENTRY
    166289    push    rbp
    167290    mov     rbp, rsp
     
    184307
    185308    leave
     309    LOG_EXIT
    186310    ret
    187311ENDPROC WrapGCC2MSC7Int
     
    189313
    190314BEGINPROC WrapGCC2MSC8Int
     315    LOG_ENTRY
    191316    push    rbp
    192317    mov     rbp, rsp
     
    211336
    212337    leave
     338    LOG_EXIT
    213339    ret
    214340ENDPROC WrapGCC2MSC8Int
     
    216342
    217343BEGINPROC WrapGCC2MSC9Int
     344    LOG_ENTRY
    218345    push    rbp
    219346    mov     rbp, rsp
     
    240367
    241368    leave
     369    LOG_EXIT
    242370    ret
    243371ENDPROC WrapGCC2MSC9Int
     
    245373
    246374BEGINPROC WrapGCC2MSC10Int
     375    LOG_ENTRY
    247376    push    rbp
    248377    mov     rbp, rsp
     
    271400
    272401    leave
     402    LOG_EXIT
    273403    ret
    274404ENDPROC WrapGCC2MSC10Int
     
    276406
    277407BEGINPROC WrapGCC2MSC11Int
     408    LOG_ENTRY
    278409    push    rbp
    279410    mov     rbp, rsp
     
    304435
    305436    leave
     437    LOG_EXIT
    306438    ret
    307439ENDPROC WrapGCC2MSC11Int
     
    309441
    310442BEGINPROC WrapGCC2MSC12Int
     443    LOG_ENTRY
    311444    push    rbp
    312445    mov     rbp, rsp
     
    339472
    340473    leave
     474    LOG_EXIT
    341475    ret
    342476ENDPROC WrapGCC2MSC12Int
     
    345479
    346480BEGINPROC WrapGCC2MSCVariadictInt
     481    LOG_ENTRY
    347482%ifdef DEBUG
    348483    ; check that there are NO floting point arguments in XMM registers!
     
    373508
    374509    add     rsp, 30h
     510    LOG_EXIT
    375511    jmp     rsi
    376512    ; (*) unconditionally spill the registers, just in case '...' implies weird stuff on MSC. Check this out!
     
    385521
    386522BEGINPROC WrapMSC2GCC0Int
     523    LOG_ENTRY
    387524    push    rbp
    388525    mov     rbp, rsp
     
    401538    mov     rsi, [ebp - 10h]
    402539    leave
     540    LOG_EXIT
    403541    ret
    404542ENDPROC WrapMSC2GCC0Int
     
    406544
    407545BEGINPROC WrapMSC2GCC1Int
    408     push    rbp
    409     mov     rbp, rsp
    410     sub     rsp, 20h
    411     mov     [ebp - 10h], rsi
    412     mov     [ebp - 18h], rdi
    413 
    414     mov     rdi, rcx
    415 %ifdef USE_DIRECT_CALLS
    416     call    $+5+0deadbeefh
    417 %else
    418     mov     rax, 0xdeadf00df00ddead
    419     call    rax
    420 %endif
    421 
    422     mov     rdi, [ebp - 18h]
    423     mov     rsi, [ebp - 10h]
    424     leave
     546    LOG_ENTRY
     547    push    rbp
     548    mov     rbp, rsp
     549    sub     rsp, 20h
     550    mov     [ebp - 10h], rsi
     551    mov     [ebp - 18h], rdi
     552
     553    mov     rdi, rcx
     554%ifdef USE_DIRECT_CALLS
     555    call    $+5+0deadbeefh
     556%else
     557    mov     rax, 0xdeadf00df00ddead
     558    call    rax
     559%endif
     560
     561    mov     rdi, [ebp - 18h]
     562    mov     rsi, [ebp - 10h]
     563    leave
     564    LOG_EXIT
    425565    ret
    426566ENDPROC WrapMSC2GCC1Int
     
    428568
    429569BEGINPROC WrapMSC2GCC2Int
     570    LOG_ENTRY
    430571    push    rbp
    431572    mov     rbp, rsp
     
    446587    mov     rsi, [ebp - 10h]
    447588    leave
     589    LOG_EXIT
    448590    ret
    449591ENDPROC WrapMSC2GCC2Int
     
    451593
    452594BEGINPROC WrapMSC2GCC3Int
     595    LOG_ENTRY
    453596    push    rbp
    454597    mov     rbp, rsp
     
    465608    mov     rsi, [ebp - 10h]
    466609    leave
     610    LOG_EXIT
    467611    ret
    468612ENDPROC WrapMSC2GCC3Int
     
    470614
    471615BEGINPROC WrapMSC2GCC4Int
     616    LOG_ENTRY
    472617    push    rbp
    473618    mov     rbp, rsp
     
    485630    mov     rsi, [ebp - 10h]
    486631    leave
     632    LOG_EXIT
    487633    ret
    488634ENDPROC WrapMSC2GCC4Int
     
    490636
    491637BEGINPROC WrapMSC2GCC5Int
     638    LOG_ENTRY
    492639    push    rbp
    493640    mov     rbp, rsp
     
    506653    mov     rsi, [ebp - 10h]
    507654    leave
     655    LOG_EXIT
    508656    ret
    509657ENDPROC WrapMSC2GCC5Int
     
    511659
    512660BEGINPROC WrapMSC2GCC6Int
     661    LOG_ENTRY
    513662    push    rbp
    514663    mov     rbp, rsp
     
    528677    mov     rsi, [ebp - 10h]
    529678    leave
     679    LOG_EXIT
    530680    ret
    531681ENDPROC WrapMSC2GCC6Int
     
    533683
    534684BEGINPROC WrapMSC2GCC7Int
     685    LOG_ENTRY
    535686    push    rbp
    536687    mov     rbp, rsp
     
    552703    mov     rsi, [ebp - 10h]
    553704    leave
     705    LOG_EXIT
    554706    ret
    555707ENDPROC WrapMSC2GCC7Int
     
    557709
    558710BEGINPROC WrapMSC2GCC8Int
     711    LOG_ENTRY
    559712    push    rbp
    560713    mov     rbp, rsp
     
    578731    mov     rsi, [ebp - 10h]
    579732    leave
     733    LOG_EXIT
    580734    ret
    581735ENDPROC WrapMSC2GCC8Int
     
    583737
    584738BEGINPROC WrapMSC2GCC9Int
     739    LOG_ENTRY
    585740    push    rbp
    586741    mov     rbp, rsp
     
    606761    mov     rsi, [ebp - 10h]
    607762    leave
     763    LOG_EXIT
    608764    ret
    609765ENDPROC WrapMSC2GCC9Int
Note: See TracChangeset for help on using the changeset viewer.

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