ptitSeb / box86

Box86 - Linux Userspace x86 Emulator with a twist, targeted at ARM Linux devices
https://box86.org
MIT License
3.37k stars 233 forks source link

wine is broken #983

Open calculatortamer opened 4 months ago

calculatortamer commented 4 months ago

wine no longer works on my orange pi 5 since d3d971d449a6eb36d068d2a2663d815c08421947 (rk3588s, joshua-riek/ubuntu-rockchip OS 24.04), box86 v0.3.7 d3d971d449a6eb36d068d2a2663d815c08421947 and fcbebfa8 and c5bccdf3, Kron4ek/Wine-Builds, tested 9.13 and many older wine

it works again when i revert to stable release v0.3.6 and 2e589f42fe7a29ced421af221ceb928a3966b54c (and build it with -D CMAKE_C_FLAGS="-D_TIME_BITS=32")

trying to run winecfg

$ winecfg Box86 with Dynarec v0.3.7 c5bccdf3 built on Jul 19 2024 22:43:52 Box86 with Dynarec v0.3.7 c5bccdf3 built on Jul 19 2024 22:43:52 Dynarec for ARM64, with extension: ASIMD AES CRC32 PMULL ATOMICS SHA1 SHA2 PageSize:4096 Running on - - - - - - - - - - - - - - - - with 8 Cores Will use Hardware counter measured at 24.0 MHz emulating 3.0 GHz Params database has 80 entries Box64 with Dynarec v0.3.0 built on Jul 20 2024 00:41:07 BOX64: Detected 48bits at least of address space Counted 31 Env var BOX64 LIB PATH: ./:lib/:lib64/:x86_64/:bin64/:libs64/:/lib/x86_64-linux-gnu/:/usr/lib/x86_64-linux-gnu/ BOX64 BIN PATH: ./:bin/:/usr/local/sbin/:/usr/local/bin/:/usr/sbin/:/usr/bin/:/sbin/:/bin/:/usr/games/:/usr/local/games/:/snap/bin/:/home/osaka/wine/bin/ Looking for /home/osaka/wine/bin/wineserver Rename process to "wineserver" Using native(wrapped) libdl.so.2 Using native(wrapped) libc.so.6 Using native(wrapped) ld-linux-x86-64.so.2 Using native(wrapped) libpthread.so.0 Using native(wrapped) libutil.so.1 Using native(wrapped) librt.so.1 Using native(wrapped) libbsd.so.0 wine: chdir to /tmp/.wine-1000/server-b301-669be2fb : No such file or directory

trying to run winecfg with BOX86_LOG=1

winecfg Debug level is 1 Dynarec for ARMv8, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA AES PMULL PageSize:4096 Running on - - - - - - - - - - - - - - - - with 8 Cores Params database has 31 entries Box86 with Dynarec v0.3.7 d3d971d4 built on Jul 20 2024 18:36:41 BOX86: Wine detected, WINEPRELOADRESERVE="" Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/ Using default BOX86_PATH: ./:bin/ Counted 27 Env var Looking for /home/osaka/wine/bin/wine argv[1]="winecfg.exe" Rename process to "wine" Using native(wrapped) libdl.so.2 Using native(wrapped) libc.so.6 Using native(wrapped) ld-linux.so.2 Using native(wrapped) libpthread.so.0 Using native(wrapped) librt.so.1 Using native(wrapped) libbsd.so.0 Using emulated /home/osaka/wine/bin/../lib/wine/i386-unix/ntdll.so Debug level is 1 Dynarec for ARMv8, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA AES PMULL PageSize:4096 Running on - - - - - - - - - - - - - - - - with 8 Cores Params database has 31 entries Box86 with Dynarec v0.3.7 d3d971d4 built on Jul 20 2024 18:36:41 BOX86: Wine detected, WINEPRELOADRESERVE="" Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/ Using default BOX86_PATH: ./:bin/ Counted 29 Env var Looking for /home/osaka/wine/bin/wine argv[1]="winecfg.exe" Rename process to "wine" Using native(wrapped) libdl.so.2 Using native(wrapped) libc.so.6 Using native(wrapped) ld-linux.so.2 Using native(wrapped) libpthread.so.0 Using native(wrapped) librt.so.1 Using native(wrapped) libbsd.so.0 Using emulated /home/osaka/wine/bin/../lib/wine/i386-unix/ntdll.so Dynarec for ARM64, with extension: ASIMD AES CRC32 PMULL ATOMICS SHA1 SHA2 PageSize:4096 Running on - - - - - - - - - - - - - - - - with 8 Cores Will use Hardware counter measured at 24.0 MHz emulating 3.0 GHz Params database has 80 entries Box64 with Dynarec v0.3.0 built on Jul 20 2024 00:41:07 BOX64: Detected 48bits at least of address space Counted 31 Env var BOX64 LIB PATH: ./:lib/:lib64/:x86_64/:bin64/:libs64/:/lib/x86_64-linux-gnu/:/usr/lib/x86_64-linux-gnu/ BOX64 BIN PATH: ./:bin/:/usr/local/sbin/:/usr/local/bin/:/usr/sbin/:/usr/bin/:/sbin/:/bin/:/usr/games/:/usr/local/games/:/snap/bin/:/home/osaka/wine/bin/ Looking for /home/osaka/wine/bin/wineserver Rename process to "wineserver" Using native(wrapped) libdl.so.2 Using native(wrapped) libc.so.6 Using native(wrapped) ld-linux-x86-64.so.2 Using native(wrapped) libpthread.so.0 Using native(wrapped) libutil.so.1 Using native(wrapped) librt.so.1 Using native(wrapped) libbsd.so.0 wine: chdir to /tmp/.wine-1000/server-b301-669be6d3 : No such file or directory

ptitSeb commented 4 months ago

This might be an esync of fsync issue? Did you tried with WINE_ESYNC=0 and/or WINE_FSYNC=0?

calculatortamer commented 4 months ago

This might be an esync of fsync issue? Did you tried with WINE_ESYNC=0 and/or WINE_FSYNC=0?

still nothing

$ export WINE_FSYNC=0 $ export WINE_ESYNC=0

$ WINE_FSYNC=0 WINE_ESYNC=0 winecfg Debug level is 1 Dynarec for ARMv8, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA AES PMULL PageSize:4096 Running on - - - - - - - - - - - - - - - - with 8 Cores Params database has 31 entries Box86 with Dynarec v0.3.7 d3d971d4 built on Jul 20 2024 18:36:41 BOX86: Wine detected, WINEPRELOADRESERVE="" Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/ Using default BOX86_PATH: ./:bin/ Counted 29 Env var Looking for /home/osaka/wine/bin/wine argv[1]="winecfg.exe" Rename process to "wine" Using native(wrapped) libdl.so.2 Using native(wrapped) libc.so.6 Using native(wrapped) ld-linux.so.2 Using native(wrapped) libpthread.so.0 Using native(wrapped) librt.so.1 Using native(wrapped) libbsd.so.0 Using emulated /home/osaka/wine/bin/../lib/wine/i386-unix/ntdll.so Debug level is 1 Dynarec for ARMv8, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA AES PMULL PageSize:4096 Running on - - - - - - - - - - - - - - - - with 8 Cores Params database has 31 entries Box86 with Dynarec v0.3.7 d3d971d4 built on Jul 20 2024 18:36:41 BOX86: Wine detected, WINEPRELOADRESERVE="" Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/ Using default BOX86_PATH: ./:bin/ Counted 31 Env var Looking for /home/osaka/wine/bin/wine argv[1]="winecfg.exe" Rename process to "wine" Using native(wrapped) libdl.so.2 Using native(wrapped) libc.so.6 Using native(wrapped) ld-linux.so.2 Using native(wrapped) libpthread.so.0 Using native(wrapped) librt.so.1 Using native(wrapped) libbsd.so.0 Using emulated /home/osaka/wine/bin/../lib/wine/i386-unix/ntdll.so Dynarec for ARM64, with extension: ASIMD AES CRC32 PMULL ATOMICS SHA1 SHA2 PageSize:4096 Running on - - - - - - - - - - - - - - - - with 8 Cores Will use Hardware counter measured at 24.0 MHz emulating 3.0 GHz Params database has 80 entries Box64 with Dynarec v0.3.0 built on Jul 20 2024 00:41:07 BOX64: Detected 48bits at least of address space Counted 33 Env var BOX64 LIB PATH: ./:lib/:lib64/:x86_64/:bin64/:libs64/:/lib/x86_64-linux-gnu/:/usr/lib/x86_64-linux-gnu/ BOX64 BIN PATH: ./:bin/:/usr/local/sbin/:/usr/local/bin/:/usr/sbin/:/usr/bin/:/sbin/:/bin/:/usr/games/:/usr/local/games/:/snap/bin/:/home/osaka/wine/bin/ Looking for /home/osaka/wine/bin/wineserver Rename process to "wineserver" Using native(wrapped) libdl.so.2 Using native(wrapped) libc.so.6 Using native(wrapped) ld-linux-x86-64.so.2 Using native(wrapped) libpthread.so.0 Using native(wrapped) libutil.so.1 Using native(wrapped) librt.so.1 Using native(wrapped) libbsd.so.0 wine: chdir to /tmp/.wine-1000/server-b301-669be82b : No such file or directory

ptitSeb commented 4 months ago

Well, I don't know then. Can you do a bisect to find the exact commit that broke it?

(I was thinking of the futexv syscall, that is needed for ESYNC iirc, that got enable lately, but it should still be disable for BAD_SIGNAL build, that should be used on RK3588 unless something change kernel side, so it must be something else)

calculatortamer commented 4 months ago

Well, I don't know then. Can you do a bisect to find the exact commit that broke it?

(I was thinking of the futexv syscall, that is needed for ESYNC iirc, that got enable lately, but it should still be disable for BAD_SIGNAL build, that should be used on RK3588 unless something change kernel side, so it must be something else)

i have found commit d3d971d449a6eb36d068d2a2663d815c08421947 to break wine, the commit before: 2e589f42fe7a29ced421af221ceb928a3966b54c still works

ptitSeb commented 4 months ago

Oh?! That one. Ummm, interesting.

I have to think of a solution then.

can you check if your armhf libc expose any of those symbols:

__lstat64_time64
__stat64_time64
__fstatat64_time64
__fstat64_time64

(you can use nm -D /PATH/TO/libs.so | grep _time64 for example)

calculatortamer commented 4 months ago

i hope i took the right lib, i found it in /usr/lib/arm-linux-gnueabihf

$ nm -D /usr/lib/arm-linux-gnueabihf/libc.so.6 | grep _time64 00066210 T aio_suspend_time64@@GLIBC_2.34 00086d84 T __clock_nanosleep_time64@@GLIBC_2.34 000b1e74 T epoll_pwait2_time64@@GLIBC_2.35 000a2530 W fcntl_time64@@GLIBC_2.34 **000a2838 T fstat64_time64@@GLIBC_2.34 000a29d8 T fstatat64_time64@@GLIBC_2.34** 000a5b68 T fts64_children_time64@@GLIBC_2.34 000a5714 T fts64_close_time64@@GLIBC_2.34 000a5504 T __fts64_open_time64@@GLIBC_2.34 000a57cc T fts64_read_time64@@GLIBC_2.34 000a5b44 T fts64_set_time64@@GLIBC_2.34 000a7f00 T ftw64_time64@@GLIBC_2.34 000c9270 T gai_suspend_time64@@GLIBC_2.34 00090c1c T glob64_time64@@GLIBC_2.34 00091bd8 T globfree64_time64@@GLIBC_2.34 000adc48 T ioctl_time64@@GLIBC_2.34 000a8a80 T __lstat64_time64@@GLIBC_2.34 00066fb4 T mq_timedreceive_time64@@GLIBC_2.34 00067194 T __mq_timedsend_time64@@GLIBC_2.34 000a7f18 T nftw64_time64@@GLIBC_2.34 000b2594 W prctl_time64@@GLIBC_2.34 **000a9808 T stat64_time64@@GLIBC_2.34** 0007e45c T __time64@@GLIBC_2.34 0009e5c8 T wait3_time64@@GLIBC_2.34 0009e6a4 T wait4_time64@@GLIBC_2.34

i see : 000a2838 T fstat64_time64@@GLIBC_2.34 000a29d8 T fstatat64_time64@@GLIBC_2.34 000a8a80 T lstat64_time64@@GLIBC_2.34 000a9808 T stat64_time64@@GLIBC_2.34

kpyrkosz commented 4 months ago

Do you build the tip of master branch with "-D_TIME_BITS=32" or without it (the default _TIME_BITS is 64, and it's broken)?

Can you compare the required symbols of both binaries, the faulty master and the working, earlier commit? The command if I'm not mistaken is objdump -T box86

calculatortamer commented 4 months ago

Do you build the tip of master branch with "-D_TIME_BITS=32" or without it (the default _TIME_BITS is 64, and it's broken)?

i only used -D_TIME_BITS=32 for older working 2e589f42fe7a29ced421af221ceb928a3966b54 since i had to (or else it errored), i didn't add it for d3d971d449a6eb36d068d2a2663d815c08421947 because i thought it would cause more issues and it wasn't mentioned in COMPILE.md anyway

but i recompiled the d3d971d449a6eb36d068d2a2663d815c08421947 and master (c5bccdf300ff5017b7225e49a934c395c51f297b) with -D CMAKE_C_FLAGS="-D_TIME_BITS=32" and winecfg is working now!

Can you compare the required symbols of both binaries, the faulty master and the working, earlier commit? The command if I'm not mistaken is objdump -T box86

build-master-broken.txt = faulty master (no -D_TIME_BITS=32)

build-master-time.txt = working master (yes -D_TIME_BITS=32)

build-test.txt = faulty d3d971d449a6eb36d068d2a2663d815c08421947 (no -D_TIME_BITS=32)

build-time32.txt = working d3d971d449a6eb36d068d2a2663d815c08421947 (yes -D_TIME_BITS=32)

build-working.txt = working earlier commit 2e589f42fe7a29ced421af221ceb928a3966b54 (yes -D_TIME_BITS=32)

(cant build 2e589f42fe7a29ced421af221ceb928a3966b54 without -D_TIME_BITS=32 or it errors)

diff between working earlier commit 2e589f42fe7a29ced421af221ceb928a3966b54 and master compiled with -D_TIME_BITS=32 is that master has those extra lines:

fstat64_time64 __fstatat64_time64 lstat64_time64 my_fstat64_time64 my_fstatat64time64 mylstat64_time64 my___stat64_time64 stat64_time64

the difference between master compiled without -D_TIME_BITS=32 and working earlier commit 2e589f42fe7a29ced421af221ceb928a3966b54 is:

master without -D_TIME_BITS=32 has this:

clock_gettime64 __fcntl_time64 fstat64_time64 fstatat64_time64 fts64_children_time64 fts64_close_time64 fts64_open_time64 fts64_read_time64 __ftw64_time64 getrlimit64 getsockopt64 glob64_time64 __ioctl_time64 lstat64_time64 my_fcntl_time64 myfstat myfstat64_time64 my_fstatat64_time64 mylstat mylstat64_time64 my_stat64_time64 nanosleep64 nftw64_time64 __prctl_time64 pthread_cond_timedwait64 pthread_mutex_timedlock64 recvmsg64 select64 semctl64 sendmsg64 setsockopt64 __stat64_time64 __time64

while working earlier commit 2e589f42fe7a29ced421af221ceb928a3966b54 with -D_TIME_BITS=32 has:

clock_gettime fcntl64 fopen fstat64 fstatat64 fts_children fts_close fts_open fts_read ftw64 getrlimit getsockopt glob64 ioctl lstat64 mmap nanosleep nftw64 prctl pthread_cond_timedwait pthread_mutex_timedlock recvmsg select semctl sendmsg setsockopt stat stat64 time

kpyrkosz commented 4 months ago

For now I'd suggest either:

ptitSeb commented 3 months ago

Can you update box86 and try again, see if it's fixed now?

calculatortamer commented 3 months ago

Can you update box86 and try again, see if it's fixed now?

sorry for answering late, i have a build error (building 66a91b858046bfb9a0aea616fa59ca354f67a4fb, cmake .. -D RK3588=1 -D CMAKE_BUILD_TYPE=RelWithDebInfo)

[ 42%] Building C object CMakeFiles/box86.dir/src/libtools/myalign64.c.o
/home/osaka/git/box86/src/libtools/myalign64.c: In function ‘UnalignStat64’:
/home/osaka/git/box86/src/libtools/myalign64.c:32:31: error: ‘struct stat64’ has no member named ‘__st_ino’; did you mean ‘st_ino’?
   32 |     i386st->__st_ino    = st->__st_ino;
      |                               ^~~~~~~~
      |                               st_ino
/home/osaka/git/box86/src/libtools/myalign64.c: In function ‘AlignStat64’:
/home/osaka/git/box86/src/libtools/myalign64.c:69:9: error: ‘struct stat64’ has no member named ‘__st_ino’; did you mean ‘st_ino’?
   69 |     st->__st_ino        = i386st->__st_ino;
      |         ^~~~~~~~
      |         st_ino
make[2]: *** [CMakeFiles/box86.dir/build.make:803: CMakeFiles/box86.dir/src/libtools/myalign64.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:370: CMakeFiles/box86.dir/all] Error 2
make: *** [Makefile:166: all] Error 2
jackduckworth commented 2 months ago

Can you update box86 and try again, see if it's fixed now?

sorry for answering late, i have a build error (building 66a91b8, cmake .. -D RK3588=1 -D CMAKE_BUILD_TYPE=RelWithDebInfo)

[ 42%] Building C object CMakeFiles/box86.dir/src/libtools/myalign64.c.o
/home/osaka/git/box86/src/libtools/myalign64.c: In function ‘UnalignStat64’:
/home/osaka/git/box86/src/libtools/myalign64.c:32:31: error: ‘struct stat64’ has no member named ‘__st_ino’; did you mean ‘st_ino’?
   32 |     i386st->__st_ino    = st->__st_ino;
      |                               ^~~~~~~~
      |                               st_ino
/home/osaka/git/box86/src/libtools/myalign64.c: In function ‘AlignStat64’:
/home/osaka/git/box86/src/libtools/myalign64.c:69:9: error: ‘struct stat64’ has no member named ‘__st_ino’; did you mean ‘st_ino’?
   69 |     st->__st_ino        = i386st->__st_ino;
      |         ^~~~~~~~
      |         st_ino
make[2]: *** [CMakeFiles/box86.dir/build.make:803: CMakeFiles/box86.dir/src/libtools/myalign64.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:370: CMakeFiles/box86.dir/all] Error 2
make: *** [Makefile:166: all] Error 2

I found this post last month when I came across the exact same issue, also on an orange pi 5 rk3588s running joshua-riek/ubuntu-rockchip OS 24.04.

Nothing seems to happening- should I give up waiting and try v0.3.6?

ptitSeb commented 2 months ago

I pushed something that might help with the build issue.

jackduckworth commented 2 months ago

I pushed something that might help with the build issue.

Wow, thanks for the quick response.

Unfortunately it doesn't seem to make any difference

/home/kevin/github/box86/src/libtools/myalign64.c: In function ‘UnalignStat64’:
/home/kevin/github/box86/src/libtools/myalign64.c:32:31: error: ‘struct stat64’ has no member named ‘__st_ino’; did you mean ‘st_ino’?
   32 |     i386st->__st_ino    = st->__st_ino;
      |                               ^~~~~~~~
      |                               st_ino
/home/kevin/github/box86/src/libtools/myalign64.c: In function ‘AlignStat64’:
/home/kevin/github/box86/src/libtools/myalign64.c:69:9: error: ‘struct stat64’ has no member named ‘__st_ino’; did you mean ‘st_ino’?
   69 |     st->__st_ino        = i386st->__st_ino;
      |         ^~~~~~~~
      |         st_ino
make[2]: *** [CMakeFiles/box86.dir/build.make:803: CMakeFiles/box86.dir/src/libtools/myalign64.c.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:370: CMakeFiles/box86.dir/all] Error 2
make: *** [Makefile:166: all] Error 2
ptitSeb commented 2 months ago

Ok, I pushed a new attempt. Hopefully it will work this time.

jackduckworth commented 2 months ago

It works!

You, sir, are a legend.

lilezek commented 1 month ago

I have this same issue when installing the box86-rpi4arm64 as of today, as I don't have a toolchain to compile 32 bits. Is this version missing the fix?

ptitSeb commented 1 month ago

This ticket is a bit messy now, there is multiple issue in there, and some are fixed. I would suggest we close this ticket and you open a new clean one @lilezek

lilezek commented 1 month ago

I'm happy to, but I think I have exactly the same issue. The OP is using an orange pi 5 and I'm using rpi5 with the prebundled box86/box64 for raspberry pi 4 on a 64-bit OS.

ptitSeb commented 1 month ago

The exact same... as in the 1st post?

ptitSeb commented 1 month ago

if that's the case, try with BOX64_FUTEX_WAITV =0