Alexandre Julliard : rpcrt4: Fix cfi annotations for the stubless proxy entry point.

Alexandre Julliard julliard at winehq.org
Thu Aug 26 11:42:08 CDT 2010


Module: wine
Branch: master
Commit: e095467b3c1ed9d2fc13c46e43cbdacd8c130522
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e095467b3c1ed9d2fc13c46e43cbdacd8c130522

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Aug 26 17:03:31 2010 +0200

rpcrt4: Fix cfi annotations for the stubless proxy entry point.

---

 dlls/rpcrt4/cproxy.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/dlls/rpcrt4/cproxy.c b/dlls/rpcrt4/cproxy.c
index 59ec80d..b07dd7c 100644
--- a/dlls/rpcrt4/cproxy.c
+++ b/dlls/rpcrt4/cproxy.c
@@ -65,7 +65,7 @@ static const IRpcProxyBufferVtbl StdProxy_Vtbl;
 #include "pshpack1.h"
 
 struct thunk {
-  BYTE push;
+  BYTE mov_eax;
   DWORD index;
   BYTE jmp;
   LONG handler;
@@ -75,9 +75,12 @@ struct thunk {
 
 extern void call_stubless_func(void);
 __ASM_GLOBAL_FUNC(call_stubless_func,
+                  "pushl %eax\n\t"  /* method index */
+                  __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
                   "pushl %esp\n\t"  /* pointer to index */
                   __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
                   "call " __ASM_NAME("ObjectStubless") __ASM_STDCALL(4) "\n\t"
+                  __ASM_CFI(".cfi_adjust_cfa_offset -4\n\t")
                   "popl %edx\n\t"  /* args size */
                   __ASM_CFI(".cfi_adjust_cfa_offset -4\n\t")
                   "movl (%esp),%ecx\n\t"  /* return address */
@@ -115,7 +118,7 @@ static const struct thunk *allocate_block( unsigned int num )
 
     for (i = 0; i < BLOCK_SIZE; i++)
     {
-        block[i].push    = 0x68; /* pushl */
+        block[i].mov_eax = 0xb8; /* movl $n,%eax */
         block[i].index   = BLOCK_SIZE * num + i + 3;
         block[i].jmp     = 0xe9; /* jmp */
         block[i].handler = (char *)call_stubless_func - (char *)(&block[i].handler + 1);




More information about the wine-cvs mailing list