Alexandre Julliard : ntdll: Make the relay debug code more generic to allow supporting 64-bit platforms .

Alexandre Julliard julliard at winehq.org
Sat Dec 27 13:45:20 CST 2008


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Sat Dec 27 20:02:34 2008 +0100

ntdll: Make the relay debug code more generic to allow supporting 64-bit platforms.

---

 dlls/ntdll/relay.c |   75 +++++++++++++++++++++++++++------------------------
 1 files changed, 40 insertions(+), 35 deletions(-)

diff --git a/dlls/ntdll/relay.c b/dlls/ntdll/relay.c
index a3031f2..a2b3f49 100644
--- a/dlls/ntdll/relay.c
+++ b/dlls/ntdll/relay.c
@@ -40,14 +40,11 @@ WINE_DEFAULT_DEBUG_CHANNEL(relay);
 
 #ifdef __i386__
 
-WINE_DECLARE_DEBUG_CHANNEL(snoop);
-WINE_DECLARE_DEBUG_CHANNEL(seh);
-
 struct relay_descr  /* descriptor for a module */
 {
     void               *magic;               /* signature */
-    void               *relay_from_32;       /* functions to call from relay thunks */
-    void               *relay_from_32_regs;
+    void               *relay_call;          /* functions to call from relay thunks */
+    void               *relay_call_regs;
     void               *private;             /* reserved for the relay code private data */
     const char         *entry_point_base;    /* base address of entry point thunks */
     const unsigned int *entry_point_offsets; /* offsets of entry points thunks */
@@ -302,25 +299,25 @@ static BOOL check_from_module( const WCHAR **includelist, const WCHAR **excludel
 /***********************************************************************
  *           RELAY_PrintArgs
  */
-static inline void RELAY_PrintArgs( const int *args, int nb_args, unsigned int typemask )
+static inline void RELAY_PrintArgs( const INT_PTR *args, int nb_args, unsigned int typemask )
 {
     while (nb_args--)
     {
 	if ((typemask & 3) && HIWORD(*args))
         {
 	    if (typemask & 2)
-                DPRINTF( "%08x %s", *args, debugstr_w((LPCWSTR)*args) );
+                DPRINTF( "%08lx %s", *args, debugstr_w((LPCWSTR)*args) );
             else
-                DPRINTF( "%08x %s", *args, debugstr_a((LPCSTR)*args) );
+                DPRINTF( "%08lx %s", *args, debugstr_a((LPCSTR)*args) );
 	}
-        else DPRINTF( "%08x", *args );
+        else DPRINTF( "%08lx", *args );
         if (nb_args) DPRINTF( "," );
         args++;
         typemask >>= 2;
     }
 }
 
-extern LONGLONG call_entry_point( void *func, int nb_args, const int *args );
+extern LONGLONG call_entry_point( void *func, int nb_args, const INT_PTR *args );
 __ASM_GLOBAL_FUNC( call_entry_point,
                    "\tpushl %ebp\n"
                    "\tmovl %esp,%ebp\n"
@@ -345,11 +342,11 @@ __ASM_GLOBAL_FUNC( call_entry_point,
 
 
 /***********************************************************************
- *           relay_call_from_32
+ *           relay_call
  *
  * stack points to the return address, i.e. the first argument is stack[1].
  */
-static LONGLONG WINAPI relay_call_from_32( struct relay_descr *descr, unsigned int idx, const int *stack )
+static LONGLONG WINAPI relay_call( struct relay_descr *descr, unsigned int idx, const INT_PTR *stack )
 {
     LONGLONG ret;
     WORD ordinal = LOWORD(idx);
@@ -367,7 +364,7 @@ static LONGLONG WINAPI relay_call_from_32( struct relay_descr *descr, unsigned i
         else
             DPRINTF( "%04x:Call %s.%u(", GetCurrentThreadId(), data->dllname, data->base + ordinal );
         RELAY_PrintArgs( stack + 1, nb_args, descr->arg_types[ordinal] );
-        DPRINTF( ") ret=%08x\n", stack[0] );
+        DPRINTF( ") ret=%08lx\n", stack[0] );
 
         ret = call_entry_point( entry_point->orig_func, nb_args, stack + 1 );
 
@@ -377,21 +374,21 @@ static LONGLONG WINAPI relay_call_from_32( struct relay_descr *descr, unsigned i
             DPRINTF( "%04x:Ret  %s.%u()", GetCurrentThreadId(), data->dllname, data->base + ordinal );
 
         if (flags & 1)  /* 64-bit return value */
-            DPRINTF( " retval=%08x%08x ret=%08x\n",
+            DPRINTF( " retval=%08x%08x ret=%08lx\n",
                      (UINT)(ret >> 32), (UINT)ret, stack[0] );
         else
-            DPRINTF( " retval=%08x ret=%08x\n", (UINT)ret, stack[0] );
+            DPRINTF( " retval=%08lx ret=%08lx\n", (UINT_PTR)ret, stack[0] );
     }
     return ret;
 }
 
 
 /***********************************************************************
- *           relay_call_from_32_regs
+ *           relay_call_regs
  */
-void WINAPI __regs_relay_call_from_32_regs( struct relay_descr *descr, unsigned int idx,
-                                            unsigned int orig_eax, unsigned int ret_addr,
-                                            CONTEXT86 *context )
+void WINAPI __regs_relay_call_regs( struct relay_descr *descr, unsigned int idx,
+                                    unsigned int orig_eax, unsigned int ret_addr,
+                                    CONTEXT86 *context )
 {
     WORD ordinal = LOWORD(idx);
     BYTE nb_args = LOBYTE(HIWORD(idx));
@@ -399,8 +396,8 @@ void WINAPI __regs_relay_call_from_32_regs( struct relay_descr *descr, unsigned
     struct relay_private_data *data = descr->private;
     struct relay_entry_point *entry_point = data->entry_points + ordinal;
     BYTE *orig_func = entry_point->orig_func;
-    int *args = (int *)context->Esp;
-    int args_copy[32];
+    INT_PTR *args = (INT_PTR *)context->Esp;
+    INT_PTR args_copy[32];
 
     /* restore the context to what it was before the relay thunk */
     context->Eax = orig_eax;
@@ -452,8 +449,8 @@ void WINAPI __regs_relay_call_from_32_regs( struct relay_descr *descr, unsigned
                  context->SegDs, context->SegEs, context->SegFs, context->SegGs, context->EFlags );
     }
 }
-extern void WINAPI relay_call_from_32_regs(void);
-DEFINE_REGS_ENTRYPOINT( relay_call_from_32_regs, 16, 16 )
+extern void WINAPI relay_call_regs(void);
+DEFINE_REGS_ENTRYPOINT( relay_call_regs, 16, 16 )
 
 
 /***********************************************************************
@@ -502,8 +499,8 @@ void RELAY_SetupDLL( HMODULE module )
                                   (exports->NumberOfFunctions-1) * sizeof(data->entry_points) )))
         return;
 
-    descr->relay_from_32 = relay_call_from_32;
-    descr->relay_from_32_regs = relay_call_from_32_regs;
+    descr->relay_call = relay_call;
+    descr->relay_call_regs = relay_call_regs;
     descr->private = data;
 
     data->module = module;
@@ -538,12 +535,30 @@ void RELAY_SetupDLL( HMODULE module )
     }
 }
 
+#else  /* __i386__ */
+
+FARPROC RELAY_GetProcAddress( HMODULE module, const IMAGE_EXPORT_DIRECTORY *exports,
+                              DWORD exp_size, FARPROC proc, DWORD ordinal, const WCHAR *user )
+{
+    return proc;
+}
+
+void RELAY_SetupDLL( HMODULE module )
+{
+}
+
+#endif  /* __i386__ */
 
 
 /***********************************************************************/
 /* snoop support */
 /***********************************************************************/
 
+#ifdef __i386__
+
+WINE_DECLARE_DEBUG_CHANNEL(seh);
+WINE_DECLARE_DEBUG_CHANNEL(snoop);
+
 #include "pshpack1.h"
 
 typedef	struct
@@ -931,22 +946,12 @@ DEFINE_REGS_ENTRYPOINT( SNOOP_Return, 0, 0 )
 
 #else  /* __i386__ */
 
-FARPROC RELAY_GetProcAddress( HMODULE module, const IMAGE_EXPORT_DIRECTORY *exports,
-                              DWORD exp_size, FARPROC proc, DWORD ordinal, const WCHAR *user )
-{
-    return proc;
-}
-
 FARPROC SNOOP_GetProcAddress( HMODULE hmod, const IMAGE_EXPORT_DIRECTORY *exports, DWORD exp_size,
                               FARPROC origfun, DWORD ordinal, const WCHAR *user )
 {
     return origfun;
 }
 
-void RELAY_SetupDLL( HMODULE module )
-{
-}
-
 void SNOOP_SetupDLL( HMODULE hmod )
 {
     FIXME("snooping works only on i386 for now.\n");




More information about the wine-cvs mailing list