SUSE 9.1 wine 0.9.12 problem

0 views
Skip to first unread message

ili...@gmail.com

unread,
Apr 29, 2006, 3:22:36 PM4/29/06
to
I upgraded my wine version from 0.9.5 to the newest 0.9.12
and I can't get wine to run.
when I start wine my system hangs,
an wine binary "wine-preloader" eats up all my reasources and just
hangs!
I used the official 9.1 binary rpm from sourcefordge.net
and a build from the wine source but the resoult is the same
wine-preloader just hangs.
The strangest thing is that when I start wine from a console I don't
get eny feedback information the console remains blank.
eny ideas what culd be causing this and a way arround it, or doesn't
wine run on this older suse distro?

Daniel Skorka

unread,
Apr 29, 2006, 4:10:49 PM4/29/06
to
ili...@gmail.com wrote:
> an wine binary "wine-preloader" eats up all my reasources and just
> hangs!

Is this true for any program (i.e. winecfg)? Did you try starting with a
fresh ~/.wine? How long do you wait before you determine that
wine-preloader indeed hangs?
Do you build your own kernel and if yes, did you choose a non-default VM
split?

Daniel

ili...@gmail.com

unread,
Apr 29, 2006, 5:11:01 PM4/29/06
to
This problem happens with all of the wine binarys includeing winecfg
I am useing the original kernel that came with the distribution,
actuely exept for wine all of my software version is the one that came
with the official suse 9.1 distribution (it's the 5 cd proffesional
version).
OK how did I notice that wine-preloader hangs? After I run any wine
binary (I tryed all of them) noting happens, even if I start them thry
a terminal I get no feedback information in the terminal window, all I
can see in the terminal is a new line. When I start kde system guard I
noticed wine-preloader useing 80 to 90 % of the system resoarces, I
actualy let wine-preloader run for abaut an hour biffore my entire
system froze and I had to restart my pc (newer had to do that in linux
biffore)
I trued starting with a fresh ~/.wine folder, and this is where I
noticed something strange I gues wine-preloader creates the dos_devices
directory with all of the supporting files, but the drive_c directory
contains no files only folders e.g. it has the "Windows" and "Program
Files " folders with all other subfolders but without eny files.

Daniel Skorka

unread,
Apr 30, 2006, 7:19:49 AM4/30/06
to
ili...@gmail.com wrote:
> I trued starting with a fresh ~/.wine folder, and this is where I
> noticed something strange I gues wine-preloader creates the dos_devices
> directory with all of the supporting files, but the drive_c directory
> contains no files only folders e.g. it has the "Windows" and "Program
> Files " folders with all other subfolders but without eny files.

For the most part, this is correct. The directory tree under ~/.wine is
created by wineprefixcreate (invoked automagically if needed), and the
only files under ~/.wine/drive_c are to be found in windows and
windows/system32.
At the moment, my best guess is that somehow several wine installations
got mixed up. Use yast to uninstall any wine packages, remove ~/.wine
and then run the following:
$ find / -iname '*wine*'
If it still finds any files, those might be leftovers from previous
installations.

Daniel
>

ili...@gmail.com

unread,
Apr 30, 2006, 2:22:06 PM4/30/06
to
Well I finaly found the problem and got wine up and running. The
problem was in the wine 0.9.12 patch file "wine-0.9.12.diff" included
in the suse source rpm
"wine-0.9.12-SuSELinux91.src.rpm" and I gues applied to the prebuild
binary
"wine-0.9.12-SuSELinux91.i586.rpm".
To get wine running I removed the lines from the diff file wich
modified the preloader binary, and now wine builds and runs, but a
question remains how good is this patch? I culdn't compile wine without
aplying the patch and obviosly there are some errors in it.

don't know if I shuld inform the suse maintainer mr. Marcus Meissner
about this?
only 190 downloads of wine for this suse version (9.1) and over 4600
for suse 10.
Tnx for the help

Daniel Skorka

unread,
Apr 30, 2006, 2:31:30 PM4/30/06
to
ili...@gmail.com wrote:
> question remains how good is this patch? I culdn't compile wine without
> aplying the patch and obviosly there are some errors in it.
>
> don't know if I shuld inform the suse maintainer mr. Marcus Meissner
> about this?

If I read you correctly, the maintainer included a patch which caused
wine to fail misteriously for you. I vote you tell the maintainer.

Daniel

ili...@gmail.com

unread,
Apr 30, 2006, 3:18:56 PM4/30/06
to
I wrote to the maintainer and I hope that this problem will be revised
and a new package will be placed on sourcefordge.net.

Segin

unread,
Apr 30, 2006, 4:25:16 PM4/30/06
to
ili...@gmail.com wrote:
> I wrote to the maintainer and I hope that this problem will be revised
> and a new package will be placed on sourcefordge.net.
>
It might be of help if you post the original patch, and a diff of your
changes. Someone might be able to do something with it.

ili...@gmail.com

unread,
Apr 30, 2006, 7:00:25 PM4/30/06
to
OK here is the patch "wine-0.9.12.diff" :

diff -ruN -x CVS wine-0.9.12/dlls/gdi/freetype.c
marcus-wine-0.9.12/dlls/gdi/freetype.c
--- wine-0.9.12/dlls/gdi/freetype.c 2006-04-12 18:10:49.000000000 +0200
+++ marcus-wine-0.9.12/dlls/gdi/freetype.c 2006-04-12
18:09:47.000000000 +0200
@@ -699,9 +699,17 @@
int i, bitmap_num, internal_leading;
FONTSIGNATURE fs;

+ /* ethiopian font which says it is regular, but it isn't. */
+ if (strstr(file,"GohaTibebZemen.ttf"))
+ return FALSE;
+ /* koffice-wordprocessing brings esstix* which appear as
symbol/greek fonts */
+ if (strstr(file,"esstix"))
+ return FALSE;
+
do {
char *family_name = fake_family;

+
TRACE("Loading font file %s index %ld\n", debugstr_a(file),
face_index);
if((err = pFT_New_Face(library, file, face_index, &ft_face)) != 0) {
WARN("Unable to load font file %s err = %x\n", debugstr_a(file),
err);
diff -ruN -x CVS wine-0.9.12/dlls/ntdll/exception.c
marcus-wine-0.9.12/dlls/ntdll/exception.c
--- wine-0.9.12/dlls/ntdll/exception.c 2006-04-12 18:10:53.000000000
+0200
+++ marcus-wine-0.9.12/dlls/ntdll/exception.c 2006-04-10
18:07:46.000000000 +0200
@@ -312,6 +312,11 @@
rec->ExceptionCode, rec->ExceptionFlags,
rec->ExceptionAddress );
for (c = 0; c < rec->NumberParameters; c++)
TRACE( " info[%ld]=%08lx\n", c,
rec->ExceptionInformation[c] );
+ if (rec->ExceptionCode == STATUS_ILLEGAL_INSTRUCTION)
+ {
+ unsigned char *x = rec->ExceptionAddress;
+ FIXME("illegal instruction at %p, %02x %02x %02x %02x %02x %02x %02x
%02x\n",x,x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7]);
+ }
if (rec->ExceptionCode == EXCEPTION_WINE_STUB)
{
if (rec->ExceptionInformation[1] >> 16)
diff -ruN -x CVS wine-0.9.12/dlls/opengl32/wgl.c
marcus-wine-0.9.12/dlls/opengl32/wgl.c
--- wine-0.9.12/dlls/opengl32/wgl.c 2006-03-30 11:47:50.000000000 +0200
+++ marcus-wine-0.9.12/dlls/opengl32/wgl.c 2006-03-31
11:54:59.000000000 +0200
@@ -535,15 +535,29 @@
BOOL ret;
DWORD type = GetObjectType(hdc);

- TRACE("(%p,%p)\n", hdc, hglrc);
+ FIXME("(%p,%p)\n", hdc, hglrc);

ENTER_GL();
if (hglrc == NULL) {
ret = glXMakeCurrent(default_display, None, NULL);
NtCurrentTeb()->glContext = NULL;
} else {
+ POINT pt;
Wine_GLContext *ctx = (Wine_GLContext *) hglrc;
Drawable drawable = get_drawable( hdc );
+ int ret;
+
+ memset( &pt, 0, sizeof(pt));
+ if (GetViewportOrgEx (hdc, &pt)) FIXME("GWOEX failed\n");
+ FIXME("worg is %d.%dn", pt.x, pt.y);
+ if (GetViewportExtEx (hdc, &pt)) FIXME("GWEEX failed\n");
+ FIXME("wext is %d.%dn", pt.x, pt.y);
+
+ if (IsBadReadPtr(ctx,sizeof(*ctx))) {
+ ERR("hglrc is bad (%p)\n", hglrc);
+ return FALSE;
+ }
+
if (ctx->ctx == NULL) {
int draw_vis_id, ctx_vis_id;
VisualID visualid = (VisualID)GetPropA( GetDesktopWindow(),
"__wine_x11_visual_id" );
@@ -569,7 +583,7 @@
}
TRACE(" created a delayed OpenGL context (%p)\n", ctx->ctx);
}
- TRACE(" make current for dis %p, drawable %p, ctx %p\n",
ctx->display, (void*) drawable, ctx->ctx);
+ FIXME(" make current for dis %p, drawable %p, ctx %p\n",
ctx->display, (void*) drawable, ctx->ctx);
ret = glXMakeCurrent(ctx->display, drawable, ctx->ctx);
NtCurrentTeb()->glContext = ctx;
if(ret && type == OBJ_MEMDC)
diff -ruN -x CVS wine-0.9.12/libs/wine/mmap.c
marcus-wine-0.9.12/libs/wine/mmap.c
--- wine-0.9.12/libs/wine/mmap.c 2006-02-15 17:42:21.000000000 +0100
+++ marcus-wine-0.9.12/libs/wine/mmap.c 2006-02-08 16:46:47.000000000
+0100
@@ -301,6 +301,7 @@
}
}

+#if 0
if (stack_ptr >= user_space_limit)
{
char *base = stack_ptr - ((unsigned int)stack_ptr &
granularity_mask) - (granularity_mask + 1);
@@ -314,6 +315,7 @@
reserve_area( base, 0 );
}
else reserve_area( user_space_limit, 0 );
+#endif
#endif /* __i386__ */

/* reserve the DOS area if not already done */
diff -ruN -x CVS wine-0.9.12/loader/preloader.c
marcus-wine-0.9.12/loader/preloader.c
--- wine-0.9.12/loader/preloader.c 2006-04-13 13:36:23.000000000 +0200
+++ marcus-wine-0.9.12/loader/preloader.c 2006-04-13 13:47:28.000000000
+0200
@@ -208,6 +208,14 @@
return SYSCALL_RET(ret);
}

+static inline int wld_personality( int perso )
+{
+ int ret;
+ __asm__ __volatile__( "pushl %%ebx; movl %2,%%ebx; int $0x80; popl
%%ebx"
+ : "=a" (ret) : "0" (SYS_personality), "r"
(perso) );
+ return SYSCALL_RET(ret);
+}
+
static inline ssize_t wld_read( int fd, void *buffer, size_t len )
{
int ret;
@@ -226,6 +234,14 @@
return SYSCALL_RET(ret);
}

+static inline int wld_execve( const char * path, char **argv, char **
envp )
+{
+ int ret;
+ __asm__ __volatile__( "pushl %%ebx; movl %2,%%ebx; int $0x80; popl
%%ebx"
+ : "=a" (ret) : "0" (SYS_execve), "r" (path),
"c" (argv), "d" (envp) );
+ return SYSCALL_RET(ret);
+}
+
static inline int wld_mprotect( const void *addr, size_t len, int prot
)
{
int ret;
@@ -914,6 +930,7 @@
ElfW(auxv_t) new_av[12], delete_av[3], *av;
struct wld_link_map main_binary_map, ld_so_map;
struct wine_preload_info **wine_main_preload_info;
+ unsigned int perso;

pargc = *stack;
argv = (char **)pargc + 1;
@@ -922,6 +939,19 @@
/* skip over the parameters */
p = argv + *pargc + 1;

+ perso = wld_personality(0xffffffff);
+ if (!(perso & 0x200000)) {
+ unsigned int newperso;
+ wld_personality(perso | 0x200000);
+ newperso = wld_personality(0xffffffff);
+ /* only execve() if the personality changed, otherwise we will loop
*/
+ if (newperso != perso) {
+ wld_execve(argv[0],argv,p);
+ fatal_error( "Failed execve %s\n", argv[0] );
+ return NULL;
+ }
+ }
+
/* skip over the environment */
while (*p)
{
diff -ruN -x CVS wine-0.9.12/programs/winecfg/audio.c
marcus-wine-0.9.12/programs/winecfg/audio.c
--- wine-0.9.12/programs/winecfg/audio.c 2006-04-12 18:11:03.000000000
+0200
+++ marcus-wine-0.9.12/programs/winecfg/audio.c 2006-04-12
18:09:59.000000000 +0200
@@ -589,7 +589,7 @@
buf = get_reg_key(config_key, "Drivers", "Audio", NULL);

/* check for first time install and set a default driver
- * select in this order: oss, alsa, first available driver, none
+ * select in this order: alsa, oss, first available driver, none
*/
if (buf == NULL)
{
@@ -598,9 +598,9 @@
/* select oss if available */
for (pAudioDrv = loadedAudioDrv; *pAudioDrv->szName;
pAudioDrv++)
{
- if (strcmp(pAudioDrv->szDriver, "oss") == 0)
+ if (strcmp(pAudioDrv->szDriver, "alsa") == 0)
{
- selectDriver(hDlg, "oss");
+ selectDriver(hDlg, "alsa");
break;
}
}
@@ -610,9 +610,9 @@
/* select alsa if available */
for (pAudioDrv = loadedAudioDrv; *pAudioDrv->szName;
pAudioDrv++)
{
- if (strcmp(pAudioDrv->szDriver, "alsa") == 0)
+ if (strcmp(pAudioDrv->szDriver, "oss") == 0)
{
- selectDriver(hDlg, "alsa");
+ selectDriver(hDlg, "oss");
break;
}
}
diff -ruN -x CVS wine-0.9.12/server/registry.c
marcus-wine-0.9.12/server/registry.c
--- wine-0.9.12/server/registry.c 2006-04-12 18:11:04.000000000 +0200
+++ marcus-wine-0.9.12/server/registry.c 2006-04-07 14:00:07.000000000
+0200
@@ -1623,7 +1623,7 @@
for (;;)
{
sprintf( p, "reg%lx%04x.tmp", (long) getpid(), count++ );
- if ((fd = open( tmp, O_CREAT | O_EXCL | O_WRONLY, 0666 )) !=
-1) break;
+ if ((fd = open( tmp, O_CREAT | O_EXCL | O_WRONLY, 0600 )) !=
-1) break;
if (errno != EEXIST) goto done;
close( fd );
}
diff -ruN -x CVS wine-0.9.12/tools/wineprefixcreate.in
marcus-wine-0.9.12/tools/wineprefixcreate.in
--- wine-0.9.12/tools/wineprefixcreate.in 2006-03-23 11:29:23.000000000
+0100
+++ marcus-wine-0.9.12/tools/wineprefixcreate.in 2006-03-23
11:26:24.000000000 +0100
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
#
# Script to create the initial WINEPREFIX directory
#
@@ -145,6 +145,33 @@
[ -d "$WINEPREFIX/drive_c" ] || mkdir "$WINEPREFIX/drive_c"
ln -s "../drive_c" "$WINEPREFIX/dosdevices/c:"
ln -s "/" "$WINEPREFIX/dosdevices/z:"
+ ln -s "/tmp" "$WINEPREFIX/dosdevices/x:"
+ if [ -d "$HOME" ]; then
+ ln -s "$HOME" "$WINEPREFIX/dosdevices/y:"
+ if [ ! -f "$HOME/.windows-label" ]; then
+ echo "HOME" > "$HOME/.windows-label"
+ fi
+ fi
+ # autodetect CD-ROMS on SUSE.
+ drive=D
+ shopt -s nullglob
+ for i in /media/* ; do
+ bn=`basename $i`
+ if [ "$i" = "/media/floppy" ]; then
+ ln -s /media/floppy "$WINEPREFIX/dosdevices/a:"
+ ln -s /dev/fd0 "$WINEPREFIX/dosdevices/a::"
+ fi
+ if echo $bn| grep -E -v "^(sd|usb-storage|floppy)" >/dev/null;
then
+ ln -s /media/$bn "$WINEPREFIX/dosdevices/"`echo $drive|tr "[A-Z]"
"[a-z]"`:
+ ln -s /dev/$bn "$WINEPREFIX/dosdevices/"`echo $drive|tr "[A-Z]"
"[a-z]"`::
+ drive=`echo $drive|tr "D-L" "E-M"`
+ fi
+ done
+ ln -s /dev/ttyS0 "$WINEPREFIX/dosdevices/com1"
+ ln -s /dev/ttyS1 "$WINEPREFIX/dosdevices/com2"
+ ln -s /dev/ttyS2 "$WINEPREFIX/dosdevices/com3"
+ ln -s /dev/ttyS3 "$WINEPREFIX/dosdevices/com4"
+ ln -s /dev/lp0 "$WINEPREFIX/dosdevices/lpt1"
fi

CROOT="$WINEPREFIX/dosdevices/c:"

ili...@gmail.com

unread,
Apr 30, 2006, 7:08:42 PM4/30/06
to
And all I did to get wine running is remove the lines that changed
preloader.c
By the way I got a responce from mr. Marcus Meissner, this is the
email:


> I write to inform you about a problem I had with wine 0.9.12 in SUSE 9.1
> the problem was with the wine-preloader binary that caused wine not to run.
> I tracked this problem to the patch file "wine-0.9.12.diff", for more
> information please take a look at this page:
>
> http://groups.google.com/group/comp.emulators.ms-windows.wine/browse_thread/thread/b6e88aff210ef6bf/62bfe4df0c2a22ff#62bfe4df0c2a22ff
>
> I hope that this problem will be revised in the next release of the rpm
> package.

Can you please try taking out the preloader.c change only?

Ciao, Marcus


I got a responce within 15 minutes wow!
tanks Marcus

Reply all
Reply to author
Forward
0 new messages