[0.4.13][RPCRT4] Sync msvc.S with WINE's inline assembly,

as suggested by Thomas

It fixes
CORE-18505 '[MSVC only] VBox 2.0.0 is not able to open, but on GCC it can'

It regressed by:
0.4.12-dev-555-g b6fdb56b9a and
0.4.12-dev-544-g 5db885cae7

Fix picked from 0.4.15-dev-5461-g 062a8f20a9

The fix works also for MSVC2010SP1 dbg builds in the older branches.
I will not create a new GCC iso for that revision, because this commit does not
affect GCC at all.
This commit is contained in:
Joachim Henze 2022-12-02 23:51:30 +01:00
parent 759e5e3364
commit 69507b2407

View file

@ -9,24 +9,25 @@ EXTERN _ndr_client_call:PROC
PUBLIC _call_stubless_func PUBLIC _call_stubless_func
_call_stubless_func: _call_stubless_func:
mov ecx,[esp+4] /* This Pointer */ mov ecx, [esp+4] /* This Pointer */
mov ecx,[ecx] /* This->lpVtbl */ mov ecx, [ecx] /* This->lpVtbl */
mov ecx,[ecx-8] /* MIDL_STUBLESS_PROXY_INFO */ mov ecx, [ecx-8] /* MIDL_STUBLESS_PROXY_INFO */
mov edx,[ecx+8] /* Info->FormatStringOffset */ mov edx, [ecx+8] /* Info->FormatStringOffset */
mov edx,[edx+eax*2] /* FormatStringOffset[index] */ movzx edx, word ptr [edx+eax*2] /* FormatStringOffset[index] */
and edx, 0000FFFFh add edx, [ecx+4] /* info->ProcFormatString + offset */
add edx,[ecx+4] /* info->ProcFormatString + offset */ movzx eax, byte ptr [edx+1] /* Oi_flags */
mov eax, [edx+8] /* arguments size */ and eax, 8 /* Oi_HAS_RPCFLAGS */
and eax, 0000FFFFh shr eax, 1
movzx eax, word ptr [edx+eax+4] /* arguments size */
push eax push eax
lea eax, [esp+8] /* &This */ lea eax, [esp+8] /* &This */
push eax push eax
push edx /* format string */ push edx /* format string */
push [ecx] /* info->pstubdesc */ push [ecx] /* info->pstubdesc */
call _ndr_client_call call _ndr_client_call
lea esp, [esp+12] lea esp, [esp+12]
pop edx /* arguments size */ pop edx /* arguments size */
mov ecx, [esp] /* return address */ mov ecx, [esp] /* return address */
add esp, edx add esp, edx
jmp ecx jmp ecx
#else #else