Hi,

i forget to attache one patch yesterday.

For winimage you need to add RtlCopyMemory in kernel32.dll, wich is define as a macro in wine.
MSDN said that function is part of Windows DDK, declared in wdm.h and ntddk.h.
(more info here : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ kmarch/hh/kmarch/k109_0zzm.asp)


emmanuel

Index: dlls/kernel/module.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/module.c,v
retrieving revision 1.6
diff -u -r1.6 module.c
--- dlls/kernel/module.c        15 Apr 2004 00:04:05 -0000      1.6
+++ dlls/kernel/module.c        29 Apr 2004 21:24:23 -0000
@@ -181,8 +181,15 @@
     }
 
     /* Not ELF, try DOS */
+#ifdef __powerpc__
+#define SwapWORD(a) (((a & 0xff00) >> 8) | ((a & 0x00ff) << 8))
+#define SwapDWORD(a) ( ((a & 0xff000000) >> 24) | ((a & 0x00ff0000) >> 8) | ((a & 
0x0000ff00) << 8) | ((a & 0x000000ff) << 24) )
+#else
+#define SwapWORD(a) a
+#define SwapDWORD(a) a
+#endif
 
-    if (header.mz.e_magic == IMAGE_DOS_SIGNATURE)
+    if (SwapWORD(header.mz.e_magic) == IMAGE_DOS_SIGNATURE)
     {
         /* We do have a DOS image so we will now try to seek into
          * the file by the amount indicated by the field
@@ -191,22 +198,22 @@
          * This will tell us if there is more header information
          * to read or not.
          */
-        if (SetFilePointer( hfile, header.mz.e_lfanew, NULL, SEEK_SET ) == -1)
+        if (SetFilePointer( hfile, SwapDWORD(header.mz.e_lfanew), NULL, SEEK_SET ) == 
-1)
             return BINARY_DOS;
         if (!ReadFile( hfile, magic, sizeof(magic), &len, NULL ) || len != 
sizeof(magic))
             return BINARY_DOS;
-
         /* Reading the magic field succeeded so
          * we will try to determine what type it is.
          */
+
         if (!memcmp( magic, "PE\0\0", 4 ))
         {
             IMAGE_FILE_HEADER FileHeader;
 
             if (ReadFile( hfile, &FileHeader, sizeof(FileHeader), &len, NULL ) && len 
== sizeof(FileHeader))
             {
-                if (FileHeader.Characteristics & IMAGE_FILE_DLL) return BINARY_PE_DLL;
-                return BINARY_PE_EXE;
+                if (SwapDWORD(FileHeader.Characteristics) & IMAGE_FILE_DLL) return 
BINARY_PE_DLL;
+               return BINARY_PE_EXE;
             }
             return BINARY_DOS;
         }



Le 29 avr. 04, à 23:04, emmanuel maillard a écrit :


Hi all,

I'm looking for people using wine on linuxPPC who want try my patches to run a NT PPC exe.
(i plan to reinstall linux/ppc to make my tests but i need to rearrange my HDs before, and it will
take times )
This doesn't work for me on MacOSX but this could be due to our port for darwin, this why i need to have feedback
from linux/ppc users.


PE headers are store in little endian even for an PPC file, so I test endiannes and swap PE infos if needed.

For my test i use winimage 3.0 for NT PPC, available here : http://www.winimage.com/download.htm

map_image seems good :

trace:module:map_image mapped PE file at 0x4f000-0xe5000
Trying to load PE image for unsupported architecture (PowerPC)
trace:module:map_image mapping section .text at 0x50000 off 400 size 6c600 flags 60000020
trace:module:map_image mapping section .rdata at 0xbd000 off 6ca00 size 1c00 flags 40000040
trace:module:map_image mapping section .data at 0xbf000 off 6e600 size 3600 flags c0000040
trace:module:map_image clearing 0xc2600 - 0xc3000
trace:module:map_image mapping section .pdata at 0xc8000 off 71c00 size 5c00 flags 40000040
trace:module:map_image mapping section .idata at 0xce000 off 77800 size 3000 flags c0000040
trace:module:map_image mapping section .reldata at 0xd1000 off 7a800 size 200 flags c0000040
trace:module:map_image mapping section .rsrc at 0xd2000 off 7aa00 size e000 flags 40000040
trace:module:map_image mapping section .reloc at 0xe0000 off 88a00 size 5000 flags 42000040
trace:module:do_relocations relocating from 0x400000-0x496000 to 0x4f000-0xe5000
trace:module:do_relocations 1848 relocations for page 6e000
trace:module:do_relocations 816 relocations for page 6f000
trace:module:do_relocations 80 relocations for page 70000
trace:module:do_relocations 40 relocations for page 71000
trace:module:do_relocations 80 relocations for page 72000
trace:module:do_relocations 32 relocations for page 73000
trace:module:do_relocations 1236 relocations for page 79000
trace:module:do_relocations 1240 relocations for page 7a000
trace:module:do_relocations 1240 relocations for page 7b000
trace:module:do_relocations 1236 relocations for page 7c000
trace:module:do_relocations 1240 relocations for page 7d000
trace:module:do_relocations 796 relocations for page 7e000
trace:module:do_relocations 1316 relocations for page 7f000
trace:module:do_relocations 704 relocations for page 80000
trace:module:do_relocations 184 relocations for page 82000


But when process start :
....
trace:module:MODULE_InitDLL entry : 0x0(L"WINIMAGE.exe",0x1) - END
0009:Starting process L"F:\\Desktop\\wimapp30\\WINIMAGE.exe" (entryproc=0xbe750)


wait few seconds ...

wine: Unhandled exception (thread 0009), starting debugger...

i test it with mosaic too but failed due to an undefined symbol in iphlpapi.dll
"err:module:load_builtin_dll failed to load .so lib for builtin L"iphlpapi.dll": dlcompat: dyld: wine Undefined symbols:
_res_9_init"


If someone with a Linux/x86 want to launch winimage PPC with +module enable to send me the output to see if my changes
give right values it will be helpfull to.


Thanks in advance

emmanuel

the patches (kernel/process.c, ntdll/loader.c, ntdll/virtual.c, server/mapping.c and winedump/pe.c) : <swap_them_all.tgz>
full winimage output with +module :<Winimage3.0-NT-PPC.log.gz>

Reply via email to