Hello,

We've done couple of changes in wine in order to compile with gcc-3.3.1 using binutils-2.14 and run on solaris
---
mercy% uname -a
SunOS mercy 5.8 Generic_108528-19 sun4u sparc SUNW,Sun-Blade-1000
---
I'm not posting this patch to wine-patch yet, since there are couple of things I'm not sure are solved in "correct" way. Diff file made on 2003-10-06 06:13 EST is attached. I've configured wine this way: "./configure --without-opengl CFLAGS="-g3 -O0""


Here go my questions regarding to this files:
* dlls/x11drv/xvidmode.c
I've been just ifdeffing out anything I couldn't compile because of missing LIBXXF86VM. Maybe original author of the code knows what *exactly* should be ifdeffed out.


* libs/wine/port.c
Hm, good old wine_switch_to_stack() I've been changing aproximately one year ago was changed a lot from that time. Anyways current change I've done in this file prevents crash caused by instruction "0xfed9d100 <start_process+16>: st %i0, [%fp +0x44]" (unused function argument arg resolves to %fp+0x44 address... (why? it's not used in that function, maybe -g3 -O0 flags?)). Substracting 96 bytes from original stack "emulates" ommited save instruction in wine_switch_to_stack() and ensures, that store instruction doesn't crash. Well, I guess original wine_switch_to_stack() code could work with older versions of gcc (very probably with gcc-3.2)...


* programs/Makefile.in
Just removed winegdb from building - we still don't have sparc register map (and related) defined.


* tools/bin2res.c
   include <limits.h> ensures PATH_MAX used later is defined.

* tools/winebuild/import.c
This is another hack needed because of gcc-3.3.1 I guess. I don't know if this would work also on x86 platform, but on solaris fixes gas's "Error: operation combines symbols in different segments". Gcc-3.3.1 compiles imports and delayed_imports into the different sections (.data.rel.local, .data.rel), thus gas threw the error mentioned above.


* windows/winproc.c
Finally, allignment problem on sparc platform - I've just ifdeffed out packing includes, so structs are alligned to (default) 4 byte boundary.


I'd appreciate any comments - especially those related to gcc-3.3.1.

Regards ;-),
Juraj

? output.txt
? wine-solaris-20031006.diff
? dlls/comctl32/a.out
? dlls/comctl32/comctl32.spec.s
? dlls/ddraw/a.out
? dlls/ddraw/ddraw.spec.s
? tools/makedep.o.aBaiw5
? tools/winebuild.tar.gz
? tools/winebuild/ddraw.spec.s
? tools/winebuild/out.txt
? windows/winproc.ii
Index: dlls/iphlpapi/ifenum.c
===================================================================
RCS file: /home/wine/wine/dlls/iphlpapi/ifenum.c,v
retrieving revision 1.6
diff -u -r1.6 ifenum.c
--- dlls/iphlpapi/ifenum.c      5 Sep 2003 23:08:37 -0000       1.6
+++ dlls/iphlpapi/ifenum.c      6 Oct 2003 10:13:07 -0000
@@ -785,14 +785,27 @@
 
   fd = socket(PF_INET, SOCK_DGRAM, 0);
   if (fd != -1) {
+#if defined(__sparc__)
+    struct lifreq ifr;
+#else
     struct ifreq ifr;
+#endif
 
+#if defined(__sparc__)
+    strncpy(ifr.lifr_name, name, IFNAMSIZ);
+    ifr.lifr_name[IFNAMSIZ-1] = '\0';
+#else
     strncpy(ifr.ifr_name, name, IFNAMSIZ);
     ifr.ifr_name[IFNAMSIZ-1] = '\0';
+#endif
     if ((ioctl(fd, SIOCGIFMTU, &ifr)))
       ret = ERROR_INVALID_DATA;
     else {
+#if defined(__sparc__)
+      *mtu = ifr.lifr_mtu;
+#else
       *mtu = ifr.ifr_mtu;
+#endif
       ret = NO_ERROR;
     }
   }
Index: dlls/x11drv/xvidmode.c
===================================================================
RCS file: /home/wine/wine/dlls/x11drv/xvidmode.c,v
retrieving revision 1.23
diff -u -r1.23 xvidmode.c
--- dlls/x11drv/xvidmode.c      30 Sep 2003 00:31:42 -0000      1.23
+++ dlls/x11drv/xvidmode.c      6 Oct 2003 10:13:07 -0000
@@ -101,7 +101,7 @@
     return 1;
 }
 
-static Bool in_desktop_mode;
+static Bool in_desktop_mode = 0;
 static const unsigned int depths[]  = {8, 16, 32};
 
 void X11DRV_XF86VM_Init(void)
@@ -454,6 +454,7 @@
 #endif
 }
 
+#ifdef HAVE_LIBXXF86VM
 /* implementation of EnumDisplaySettings for XF86VM */
 BOOL X11DRV_XF86VM_EnumDisplaySettingsExW( LPCWSTR name, DWORD n, LPDEVMODEW devmode, 
DWORD flags)
 {
@@ -492,6 +493,7 @@
     TRACE("mode %ld -- not present\n", n);
     return FALSE;
 }
+#endif
 
 /* implementation of ChangeDisplaySettings for XF86VM */
 LONG X11DRV_XF86VM_ChangeDisplaySettingsExW( LPCWSTR devname, LPDEVMODEW devmode,
@@ -612,17 +614,20 @@
  */
 BOOL X11DRV_EnumDisplaySettingsExW( LPCWSTR name, DWORD n, LPDEVMODEW devmode, DWORD 
flags)
 {
+#ifdef HAVE_LIBXXF86VM
     if (dd_modes) 
     {
         /* XVidMode */
         return X11DRV_XF86VM_EnumDisplaySettingsExW(name, n, devmode, flags);
     }
-    else if (in_desktop_mode)
+    else
+    if (in_desktop_mode)
     {
         /* desktop */
         return X11DRV_desktop_EnumDisplaySettingsExW(name, n, devmode, flags);
     }
     else
+#endif
     {
         /* no resolution changing */
         return X11DRV_nores_EnumDisplaySettingsExW(name, n, devmode, flags);
@@ -674,6 +679,7 @@
     {
         TRACE("Return to original display mode\n");
     }
+#ifdef HAVE_LIBXXF86VM
     if (dd_modes) 
     {
         /* XVidMode */
@@ -687,6 +693,7 @@
                                                         hwnd, flags, lpvoid );
     }
     else
+#endif
     {
         /* no resolution changing */
         return X11DRV_nores_ChangeDisplaySettingsExW( devname, devmode,
Index: libs/wine/port.c
===================================================================
RCS file: /home/wine/wine/libs/wine/port.c,v
retrieving revision 1.1
diff -u -r1.1 port.c
--- libs/wine/port.c    29 Aug 2003 22:23:42 -0000      1.1
+++ libs/wine/port.c    6 Oct 2003 10:13:07 -0000
@@ -69,7 +69,7 @@
 __ASM_GLOBAL_FUNC( wine_switch_to_stack,
                    "mov %o0, %l0\n\t" /* store first argument */
                    "mov %o1, %l1\n\t" /* store second argument */
-                   "mov %o2, %sp\n\t" /* store stack */
+                   "sub %o2, 96, %sp\n\t" /* store stack */
                    "call %l0, 0\n\t" /* call func */
                    "mov %l1, %o0\n\t" /* delay slot:  arg for func */
                    "ta 0x01"); /* breakpoint - we never get here */
Index: programs/Makefile.in
===================================================================
RCS file: /home/wine/wine/programs/Makefile.in,v
retrieving revision 1.39
diff -u -r1.39 Makefile.in
--- programs/Makefile.in        23 Jun 2003 19:51:21 -0000      1.39
+++ programs/Makefile.in        6 Oct 2003 10:13:07 -0000
@@ -26,7 +26,6 @@
        wineboot \
        winecfg \
        wineconsole \
-       winedbg \
        winefile \
        winemenubuilder \
        winemine \
@@ -53,7 +52,6 @@
        wineboot \
        winecfg \
        wineconsole \
-       winedbg \
        winefile \
        winemenubuilder \
        winemine \
@@ -74,7 +72,6 @@
        wineboot \
        winecfg \
        wineconsole \
-       winedbg \
        winefile \
        winemine \
        winepath \
@@ -85,7 +82,6 @@
        rpcss.exe \
        wcmd.exe \
        wineconsole.exe \
-       winedbg.exe \
        winemenubuilder.exe \
        winevdm.exe \
        winhelp.exe
Index: tools/bin2res.c
===================================================================
RCS file: /home/wine/wine/tools/bin2res.c,v
retrieving revision 1.18
diff -u -r1.18 bin2res.c
--- tools/bin2res.c     3 Oct 2003 03:34:10 -0000       1.18
+++ tools/bin2res.c     6 Oct 2003 10:13:07 -0000
@@ -24,6 +24,7 @@
 #include "wine/port.h"
 
 #include <stdio.h>
+#include <limits.h>
 #include <stdlib.h>
 #include <ctype.h>
 #include <string.h>
Index: tools/winebuild/import.c
===================================================================
RCS file: /home/wine/wine/tools/winebuild/import.c,v
retrieving revision 1.52
diff -u -r1.52 import.c
--- tools/winebuild/import.c    13 Aug 2003 21:57:42 -0000      1.52
+++ tools/winebuild/import.c    6 Oct 2003 10:13:07 -0000
@@ -806,7 +806,7 @@
 
     fprintf( outfile, "#ifndef __GNUC__\nstatic void __asm__dummy_import(void) 
{\n#endif\n\n" );
     pos = 20 * (nb_imm + 1);  /* offset of imports.data from start of imports */
-    fprintf( outfile, "asm(\".data\\n\\t.align %d\\n\"\n", get_alignment(8) );
+    fprintf( outfile, "asm(\".section\\t\\\".data.rel.local\\\"\\n\\t.align 
%d\\n\"\n", get_alignment(8) );
     for (i = 0; i < nb_imports; i++)
     {
         if (dll_imports[i]->delay) continue;
@@ -1082,7 +1082,7 @@
         idx++;
     }
 
-    fprintf( outfile, "\n    \".data\\n\\t.align %d\\n\"\n", get_alignment(8) );
+    fprintf( outfile, "\n    \".section\\t\\\".data.rel\\\"\\n\\t.align %d\\n\"\n", 
get_alignment(8) );
     pos = nb_delayed * 32;
     for (i = 0; i < nb_imports; i++)
     {
Index: windows/winproc.c
===================================================================
RCS file: /home/wine/wine/windows/winproc.c,v
retrieving revision 1.108
diff -u -r1.108 winproc.c
--- windows/winproc.c   5 Sep 2003 23:15:39 -0000       1.108
+++ windows/winproc.c   6 Oct 2003 10:13:07 -0000
@@ -47,7 +47,9 @@
 WINE_DECLARE_DEBUG_CHANNEL(relay);
 WINE_DEFAULT_DEBUG_CHANNEL(win);
 
-#include "pshpack1.h"
+#if !defined(__sparc__)
+#  include "pshpack1.h"
+#endif
 
 /* Window procedure 16-to-32-bit thunk */
 typedef struct
@@ -78,7 +80,10 @@
     BYTE       jmp;                  /* jmp  proc (relative jump) */
     WNDPROC    proc;
 } WINPROC_JUMP;
-#include "poppack.h"
+
+#if !defined(__sparc__)
+#  include "poppack.h"
+#endif
 
 typedef union
 {

Reply via email to