ptitSeb / box86

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

SteamCMD fails with futex robust_list not initialized by pthreads #976

Open RyuRaiko opened 3 months ago

RyuRaiko commented 3 months ago

SteamCMD via Termux fails with this error log

root@localhost:~# LD_LIBRARY_PATH="/root/Steam/linux32/:$LD_LIBRARY_PATH" box86 /root/Steam/linux32/steamcmd
Debug level is 1
Dynarec for ARMv8, with extension: HALF FAST_MULT EDSP NEON VFPv4 IDIVA AES PMULL PageSize:4096 Running on Cortex-A55 Cortex-A78 with 8 Cores
Params database has 31 entries
Box86 with Dynarec v0.3.7 9354744f built on Jul  3 2024 12:48:20
Using default BOX86_LD_LIBRARY_PATH: ./:lib/:lib32/:x86/:i686/
Using default BOX86_PATH: ./:bin/
Counted 23 Env var
Looking for /root/Steam/linux32/steamcmd
steam detected
Rename process to "steamcmd"
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 native(wrapped) libm.so.6
Using native(wrapped) crashhandler.so
Redirecting stderr to '/root/Steam/logs/stderr.txt'               Logging directory: '/root/Steam/logs'
Looks like steam didn't shutdown cleanly, scheduling immediate update check
[  0%] Checking for available updates...
[----] Verifying installation...                                  UpdateUI: skip show logoUsing emulated /root/Steam/linux32/steamconsole.so
Using emulated /root/Steam/linux32/libtier0_s.so
Using emulated /root/Steam/linux32/libvstdlib_s.so                Warning: Weak Symbol _ZGTtnaj not found, cannot apply R_386_JMP_SLOT 0x60254dd0 (0xd536)
Warning: Weak Symbol _ZGTtnaj not found, cannot apply R_386_JMP_SLOT 0x604a9aa4 (0xb1c6)
Warning: Weak Symbol _ZGTtnaj not found, cannot apply R_386_JMP_SLOT 0x600cc95c (0x9246)                                            Steam Console Client (c) Valve Corporation - version 1718904263
-- type 'quit' to exit --                                         Loading Steam API...Using emulated /root/Steam/linux32/steamclient.so                                                               Warning: Weak Symbol _ZGTtnaj not found, cannot apply R_386_JMP_SLOT 0x66a434b4 (0x129fb6)
Fatal error: futex robust_list not initialized by pthreads
6816|SIGSEGV @0xe626c088 (???(0xe626c088)) (x86pc=0x6548fab6//root/Steam/linux32/steamclient.so:"/root/Steam/linux32/steamclient.so + 0x1002ab6", esp=0xe703286c, stack=0xe6f33000:0xe7033000 own=0xe6f33000 fp=0xe7032834), for accessing 0x1 (code=1/prot=0), db=0xe6113330(0xe626c084:0xe626c170/0x6548fab6:0x6548faf6//root/Steam/linux32/steamclient.so + 0x1002ab6:clean, hash:4b0e4615/4b0e4615)
EAX:0x00000001 ECX:0x00001aa0 EDX:0x66acd080 EBX:0x66a430cc
ESP:0xe703286c EBP:0x66a86254 ESI:0x660b66d0 EDI:0x00000000
ESP-0x10:0x00000000 ESP-0x0c:0x00000000 ESP-0x08:0xaf6f0003 ESP-0x04:0x6548fab6
ESP+0x00:0x660b672a ESP+0x04:0x660b66d0 ESP+0x08:0xe70328a4 ESP+0x0c:0xe70328a8
6816|Double SIGSEGV (code=1, pc=0xe626c088, addr=0x1)!
src/common/framefunction.cpp (238) : Assertion Failed: CFrameFunctionMgr::~CFrameFunctionMgr: non static FrameFunction[CHTTPClient::BFrameFuncHandleCompletedWorkItems] still registered
Emit Signal 5 at IP=0x300db5b5 / addr=0x300db5b5, code=128
BOX86: Warning, calling Signal function handler SIG_DFL with 3 args
Sigfault/Segbus while quitting, exiting silently

Was working perfectly until a recent update, anyone have any ideas?

gordon0907 commented 3 months ago

I'm encountering a similar issue with SteamCMD on macOS (ARM) using Docker. (I just coincidentally found this thread on Google when looking for a workaround.) The error is:

steam@92b587f0f023:~/steamcmd$ ./steamcmd.sh +login anonymous +app_update 376030 +quit
Redirecting stderr to '/home/steam/Steam/logs/stderr.txt'
Logging directory: '/home/steam/Steam/logs'
Looks like steam didn't shutdown cleanly, scheduling immediate update check
[  0%] Checking for available updates...
[----] Verifying installation...
UpdateUI: skip show logoSteam Console Client (c) Valve Corporation - version 1718904263
-- type 'quit' to exit --
Loading Steam API...Fatal error: futex robust_list not initialized by pthreads
./steamcmd.sh: line 76:    75 Segmentation fault      $DEBUGGER "$STEAMEXE" "$@"
steam@92b587f0f023:~/steamcmd$ 

I recall being able to run the image previously, but I'm not certain. Downgrading Docker to version 4.30.0 didn't help. This might be a SteamCMD issue.

nExysYT commented 2 months ago

What do you using to emulate x86_64 on Termux?

ptitSeb commented 2 months ago

What do you using to emulate x86_64 on Termux?

box64 I suppose, as it's box86 repo...

nExysYT commented 2 months ago

What do you using to emulate x86_64 on Termux?

box64 I suppose, as it's box86 repo...

I know, i just thought maybe he's using something like Box64Droid or Box4Droid cuz its little bit difficult to make SteamCMD work on vanilla Box64 in Termux for me, its just not running (trying to run it natively and then nothing else) i dont know how. Sorry for my bad eng.

ptitSeb commented 2 months ago

Can you update box86 and try again, see if it works better now?

nExysYT commented 2 months ago

Can you update box86 and try again, see if it works better now?

After updating box86, Im still getting same error as above.

Jeerachee commented 1 month ago

This issue is still present for me on the latest commit

ptitSeb commented 1 month ago

I have actually analyzed this error: the issue comes from a missing syscall on the OS. And even if the syscall was supported, steamcmd also expect the robust_list to be setup by libc. A patch is possible to fake all this, but I'm usure of the side-effect for now.

RyuRaiko commented 1 month ago

I got it working with WINE under Box64

nExysYT commented 1 month ago

I got it working with WINE under Box64

Guide? Because when im trying to run SteamCMD with wine under box64 im stuck on this :

root@localhost:~/stmcmd# box64 wine64 steamcmd.exe
Allow missing needed libs
Dynarec for ARM64, with extension: ASIMD AES CRC32 PMULL ATOMICS SHA1 SHA2 PageSize:4096 Running on Cortex-A55 Cortex-A78 with 8 Cores
Will use Hardware counter measured at 25.4 MHz emulating 3.2 GHz
Params database has 90 entries
Using bash "/opt/box64_bash"
Box64 with Dynarec v0.3.1 7317472b built on Sep 23 2024 22:50:38
BOX64: Wine64 detected, WINEPRELOADRESERVE=""
BOX64: Didn't detect 48bits of address space, considering it's 39bits
WINE prereserve of 0x10000:0x8000 done
WINE prereserve of 0x110000:0x30000000 done
WINE prereserve of 0x7f000000:0x3000000 done
BOX64: Detected running wine with "steamcmd.exe"
Counted 37 Env var
BOX64 LIB PATH: BOX64 BIN PATH: ./:bin/:/usr/local/sbin/:/usr/local/bin/:/bin/:/usr/bin/:/sbin/:/usr/sbin/:/usr/games/:/usr/local/games/:/data/data/com.termux/files/usr/bin/:/system/bin/:/system/xbin/:/opt/wine/bin/
Looking for wine64
Apply RC params for wine64
Applying BOX64_MAXCPU=64
argv[1]="steamcmd.exe"
Rename process to "wine64"
Using native(wrapped) libdl.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux-x86-64.so.2
Using native(wrapped) libutil.so.1
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Using emulated /opt/wine/bin/../lib/wine/x86_64-unix/ntdll.so
Using emulated /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
Allow missing needed libs
Dynarec for ARM64, with extension: ASIMD AES CRC32 PMULL ATOMICS SHA1 SHA2 PageSize:4096 Running on Cortex-A55 Cortex-A78 with 8 Cores
Will use Hardware counter measured at 25.4 MHz emulating 3.2 GHz
Params database has 90 entries
Using bash "/opt/box64_bash"
Box64 with Dynarec v0.3.1 7317472b built on Sep 23 2024 22:50:38
BOX64: Wine64 detected, WINEPRELOADRESERVE=""
BOX64: Didn't detect 48bits of address space, considering it's 39bits
WINE prereserve of 0x10000:0x8000 done
WINE prereserve of 0x110000:0x30000000 done
WINE prereserve of 0x7f000000:0x3000000 done
BOX64: Detected running wine with "steamcmd.exe"
Counted 39 Env var
BOX64 LIB PATH: BOX64 BIN PATH: ./:bin/:/usr/local/sbin/:/usr/local/bin/:/bin/:/usr/bin/:/sbin/:/usr/sbin/:/usr/games/:/usr/local/games/:/data/data/com.termux/files/usr/bin/:/system/bin/:/system/xbin/:/opt/wine/bin/
Looking for /opt/wine/bin/wine64
Apply RC params for wine64
Applying BOX64_MAXCPU=64
argv[1]="steamcmd.exe"
Rename process to "wine64"
Using native(wrapped) libdl.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux-x86-64.so.2
Using native(wrapped) libutil.so.1
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Using emulated /opt/wine/bin/../lib/wine/x86_64-unix/ntdll.so
Using emulated /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
Allow missing needed libs
Dynarec for ARM64, with extension: ASIMD AES CRC32 PMULL ATOMICS SHA1 SHA2 PageSize:4096 Running on Cortex-A55 Cortex-A78 with 8 Cores
Will use Hardware counter measured at 25.4 MHz emulating 3.2 GHz
Params database has 90 entries
Using bash "/opt/box64_bash"
Box64 with Dynarec v0.3.1 7317472b built on Sep 23 2024 22:50:38
BOX64: Didn't detect 48bits of address space, considering it's 39bits
Counted 39 Env var
BOX64 LIB PATH: BOX64 BIN PATH: ./:bin/:/usr/local/sbin/:/usr/local/bin/:/bin/:/usr/bin/:/sbin/:/usr/sbin/:/usr/games/:/usr/local/games/:/data/data/com.termux/files/usr/bin/:/system/bin/:/system/xbin/:/opt/wine/bin/
Looking for /opt/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
Using emulated /opt/wine/lib/wine/x86_64-unix/libwine.so.1
Allow missing needed libs
Dynarec for ARM64, with extension: ASIMD AES CRC32 PMULL ATOMICS SHA1 SHA2 PageSize:4096 Running on Cortex-A55 Cortex-A78 with 8 Cores
Will use Hardware counter measured at 4.2 GHz
Params database has 90 entries
Using bash "/opt/box64_bash"
Box64 with Dynarec v0.3.1 7317472b built on Sep 23 2024 22:50:38
BOX64: Wine64 detected, WINEPRELOADRESERVE="000400000-000437000"
BOX64: Didn't detect 48bits of address space, considering it's 39bits
WINE prereserve of 0x10000:0x8000 done
WINE prereserve of 0x110000:0x30000000 done
WINE prereserve of 0x7f000000:0x3000000 done
BOX64: Detected running wine with "conhost.exe"
Counted 41 Env var
BOX64 LIB PATH: BOX64 BIN PATH: ./:bin/:/usr/local/sbin/:/usr/local/bin/:/bin/:/usr/bin/:/sbin/:/usr/sbin/:/usr/games/:/usr/local/games/:/data/data/com.termux/files/usr/bin/:/system/bin/:/system/xbin/:/opt/wine/bin/
Looking for /opt/wine/bin/wine64
Apply RC params for wine64
Applying BOX64_MAXCPU=64
argv[1]="C:\windows\system32\conhost.exe"
argv[2]="--unix"
argv[3]="--width"
argv[4]="53"
argv[5]="--height"
argv[6]="48"
argv[7]="--server"
argv[8]="0x10"
Rename process to "wine64"
Using native(wrapped) libdl.so.2
Using native(wrapped) libpthread.so.0
Using native(wrapped) libc.so.6
Using native(wrapped) ld-linux-x86-64.so.2
Using native(wrapped) libutil.so.1
Using native(wrapped) librt.so.1
Using native(wrapped) libbsd.so.0
Using emulated /opt/wine/bin/../lib/wine/x86_64-unix/ntdll.so
Using emulated /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
Using emulated /opt/wine/lib/wine/x86_64-unix/libwine.so.1
Using emulated /opt/wine/lib/wine/x86_64-unix/win32u.so
Using native(wrapped) libm.so.6
Using native(wrapped) libfreetype.so.6
Using native(wrapped) libfontconfig.so.1
Using native(wrapped) libexpat.so.1
Using emulated /opt/wine/lib/wine/x86_64-unix/win32u.so
Using native(wrapped) libm.so.6
Using native(wrapped) libfreetype.so.6
Using native(wrapped) libfontconfig.so.1
Using native(wrapped) libexpat.so.1
Box86 with Dynarec v0.3.7 54c806c5 built on Sep 23 2024 22:19:25                                          Redirecting stderr to 'Z:\root\stmcmd\logs\stderr.txt
'
Looks like steam didn't shutdown cleanly, scheduling
immediate update check
ILocalize::AddFile() failed to load file "public/stea
mbootstrapper_english.txt".
[  0%] Checking for available update...

it stuck on 0%