ValveSoftware / steam-for-linux

Issue tracking for the Steam for Linux beta client
4.18k stars 173 forks source link

HL1 crashes after switching between fullscreen/windowed mode #843

Closed dscharrer closed 11 years ago

dscharrer commented 11 years ago

Steps to reproduce:

  1. Go to Optiosns -> Video
  2. Toggle the "Run in a window" checkbox
  3. Click Apply
  4. Boom

The crash happens after the change, so the desired mode will be in effect the next time when starting Half-Life, making this only a minor issue for me

It doesn't seem to be uploading a crash dump:

AppActive: active
"SDL_WINDOWEVENT_FOCUS_GAINED in 2\n"
1 0
scandir failed:/home/dscharrer/Games/Steam/SteamApps/common/Half-Life/./platform/logos
1 0
1 0
1 0
1 0
1 0
1 0
1 0
World module shutdown.

Server module shutdown.

Using breakpad crash handler
Forcing breakpad minidump interfaces to load
Looking up breakpad interfaces from steamclient
Calling BreakpadMiniDumpSystemInit
Steam_SetMinidumpSteamID:  Caching Steam ID:  76561198055870470 [API loaded yes]
Steam_SetMinidumpSteamID:  Setting Steam ID:  76561198055870470
Looking up breakpad interfaces from steamclient
Calling BreakpadMiniDumpSystemInit
Steam_SetMinidumpSteamID:  Caching Steam ID:  76561198055870470 [API loaded yes]
Steam_SetMinidumpSteamID:  Setting Steam ID:  76561198055870470
Steam_SetMinidumpSteamID:  Caching Steam ID:  76561198055870470 [API loaded yes]
Steam_SetMinidumpSteamID:  Setting Steam ID:  76561198055870470
Game removed: AppID 70 "Half-Life (Beta)", ProcID 25367

Here is a gdb backtrace from switching from fullscreen to windowed mode:

(gdb) bt full
#0  Q_strlen (str=0xef3c40e0 <Address 0xef3c40e0 out of bounds>) at ../engine/common.c:212
        count = 0
#1  0xf6c73011 in Cvar_RegisterVariable (variable=0xf6e40c20 <voice_loopback>) at ../engine/cvar.c:387
        oldstr = 0xef3c40e0 <Address 0xef3c40e0 out of bounds>
        dummy = <optimized out>
        v = <optimized out>
        n = 0xef3c40e0
        dummyvar = {name = 0xe13d9060 "\355\001\360\035H", string = 0xf6cd5648 <Hunk_AllocName+152> "\215CH\306CG", flags = -516059032, value = -2.24875862e+33, next = 0x40}
#2  0xf6d597df in Voice_RegisterCvars () at ../engine/voice.cpp:338
No locals.
#3  0xf6c824ed in Host_Init (parms=0xf74b6fe4 <host_parms>) at ../engine/host.c:1787
        versionString = "\364\306\336\366,\307\377\377_\307\377\377\000\000\000\000\000\000\000\000@D\320N\213\366\271N\000@\320N\240\306\377\377\020\000\000\000\000\306\377\377Q\260\274N@\000\000\000\017'\000\000\060\000\000\000pD\320NxD\320N@D\320N\000\000\000\000i\002\000\000pD\320NpD\320NlD\320No\364\313N\000\000\000\000\000\000\000\000\030\200\304N@D\320N\000\020\200\002\000@\320N\b\000\200\002\060\060\255\b\300\204\254\b \000\000\000Q\363\270N\302\204\254\bP\000\000\000\017'\000\000(\000\000\000pD\320NxD\320N\022_\264F$\000\000\000\005\000\000\000\000\000\000\000\070\000\000\000\000\000\000\000\020", '\000' <repeats 11 times>, "mR\275N\000@\320Nh\324{\b@D\320N4\000\000\000\033b\275N@\000\000\000\070\000\000\000\213<\275N\000@\320N@D\320N`\324{\b8\000\000\000@\000\000"
#4  0xf6cab5a7 in Sys_InitGame (lpOrgCmdLine=0x8327520 "/home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hl_linux -game valve -novid 0 ", pBaseDir=0x804b220 <szBaseDir> "/home/dscharrer/Games/Steam/SteamApps/common/Half-Life", pwnd=0xf74ad188 <g_Game+8>, 
    bIsDedicated=0) at ../engine/sys_dll2.cpp:769
        gD3DMode = false
#5  0xf6cadc4a in CEngine::Load (this=0xf6ead1a0 <g_Engine>, dedicated=false, basedir=0x804b220 <szBaseDir> "/home/dscharrer/Games/Steam/SteamApps/common/Half-Life", 
    cmdline=0x8327520 "/home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hl_linux -game valve -novid 0 ") at ../engine/sys_engine.cpp:206
        success = false
#6  0xf6cab8e8 in RunListenServer (instance=0x0, basedir=0x804b220 <szBaseDir> "/home/dscharrer/Games/Steam/SteamApps/common/Half-Life", cmdline=0x8327520 "/home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hl_linux -game valve -novid 0 ", 
    postRestartCmdLineArgs=0x804d360 <main::szNewCommandParams> "", launcherFactory=0x8049170 <CreateInterfaceLocal(char const*, int*)>, filesystemFactory=0xf7feb810 <CreateInterface(char const*, int*)>) at ../engine/sys_dll2.cpp:882
        result = 0
        OrigCmd = "/home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hl_linux\000-game\000valve\000-novid\000\060", '\000' <repeats 939 times>
#7  0x08048c27 in main (argc=3, argv=0xffffc994) at ../launcher/launcher.cpp:407
        engineAPI = 0xf6ea87e0 <__g_CEngineAPI_singleton>
        engineFactory = <optimized out>
        filesystemModule = 0x8830b20
        engineResult = 0
        szNewCommandParams = '\000' <repeats 2047 times>
        engineModule = 0x804fc00
        exename = "/home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hl_linux", '\000' <repeats 192 times>
        hl_binary_name = 0x8049ea9 "hl"
        game = <optimized out>
        restart = false
        szFirstSep = 0x0
        enginedll = 0x8049e88 "hw.so"
        mod = <optimized out>

system information

alfred-valve commented 11 years ago

Can you reproduce this crash when in windowed mode by just changing the resolution you are running at as well?

dscharrer commented 11 years ago

I just checked, and changing the resolution (both in windowed or fullscreen mode) also crashes the game.

alfred-valve commented 11 years ago

Can you post your OS details please, it sounds like something is pinning hw.so open.

dscharrer commented 11 years ago

You mean the system information linked in the OP?

Processor Information:
    Vendor:  AuthenticAMD
    Speed: 2400 Mhz
    4 logical processors
    4 physical processors
    HyperThreading:  Unsupported
    FCMOV:  Supported
    SSE2:  Supported
    SSE3:  Supported
    SSSE3:  Supported
    SSE4a:  Supported
    SSE41:  Unsupported
    SSE42:  Unsupported

Network Information:
    Network Speed:  

Operating System Version:
    "Gentoo Base System release 2.2" (64 bit)
    Kernel Name:  Linux
    Kernel Version:  3.6.11-gentoo
    X Server vendor:  The X.Org Foundation
    X Server release:  11204000

Video Card:
    Driver:  ATI Technologies Inc. AMD Radeon HD 7900 Series

    Driver Version:  4.2.11762 Compatibility Profile Context
    Desktop Color Depth: 24 bits per pixel
    Monitor Refresh Rate: 59 Hz
    VendorID:  0x1002
    DeviceID:  0x679a
    Number of Monitors:  1
    Number of Logical Video Cards:  1
    Primary Display Resolution:  1920 x 1200
    Desktop Resolution: 1920 x 1200
    Primary Display Size: 20.43" x 12.76"  (24.06" diag)
                                            51.9cm x 32.4cm  (61.1cm diag)
    Primary VRAM Not Detected

Sound card:
    Audio device: Realtek ALC889A

Memory:
    RAM:  7989 Mb

Miscellaneous:
    UI Language:  English
    LANG:  en_US.utf8
    Microphone:  Not set
    Total Hard Disk Space Available:  240239 Mb
    Largest Free Hard Disk Block:  19507 Mb

Installed software:

Recent Failure Reports:
    Thu Jan 24 21:52:30 2013 GMT: file ''/tmp/dumps/assert_20130124225224_1.dmp'', upload yes: ''CrashID=bp-ce39f05a-f58f-45a7-b283-d80022130124''
    Thu Jan 24 21:59:54 2013 GMT: file ''/tmp/dumps/assert_20130124225949_1.dmp'', upload yes: ''CrashID=bp-5dd3221d-3bf2-4248-a989-e3dd82130124''
    Thu Jan 24 22:04:31 2013 GMT: file ''/tmp/dumps/assert_20130124230427_1.dmp'', upload yes: ''CrashID=bp-d16c8729-8e19-45d2-ace9-823dd2130124''
    Thu Jan 24 22:17:27 2013 GMT: file ''/tmp/dumps/assert_20130124231720_1.dmp'', upload yes: ''CrashID=bp-e591a72f-4b6b-4add-be89-e53202130124''
    Thu Jan 24 22:34:51 2013 GMT: file ''/tmp/dumps/assert_20130124233442_1.dmp'', upload yes: ''CrashID=bp-71c60b0f-a874-452b-8f85-d4f032130124''
    Thu Jan 24 22:35:22 2013 GMT: file ''/tmp/dumps/assert_20130124233517_1.dmp'', upload yes: ''CrashID=bp-149c14d6-e4db-4db3-9a01-310142130124''
    Thu Jan 24 23:23:27 2013 GMT: file ''/tmp/dumps/assert_20130125002321_1.dmp'', upload yes: ''CrashID=bp-9259264f-4f2b-4837-bab0-a1f2a2130124''
    Thu Jan 24 23:43:05 2013 GMT: file ''/tmp/dumps/crash_20130125004303_1.dmp'', upload yes: ''CrashID=bp-49d88888-d4f6-456b-b65c-e06e62130124''
    Thu Jan 24 23:56:48 2013 GMT: file ''/tmp/dumps/assert_20130125005642_1.dmp'', upload yes: ''CrashID=bp-e696cff2-2e51-48c7-a518-001b12130124''
    Fri Jan 25 00:12:37 2013 GMT: file ''/tmp/dumps/assert_20130125011233_1.dmp'', upload yes: ''CrashID=bp-f758bc53-8302-44b0-b487-5e5642130124''
    Fri Jan 25 00:13:40 2013 GMT: file ''/tmp/dumps/assert_20130125011336_1.dmp'', upload yes: ''CrashID=bp-08da7e0f-f5d9-4328-acdb-c9f652130124''
    Fri Jan 25 00:19:46 2013 GMT: file ''/tmp/dumps/assert_20130125011942_1.dmp'', upload yes: ''CrashID=bp-39641937-0977-4193-81f5-aba5b2130124''
    Fri Jan 25 00:27:44 2013 GMT: file ''/tmp/dumps/assert_20130125012740_1.dmp'', upload yes: ''CrashID=bp-dbb57aaf-9a08-482b-bfae-22c832130124''

Anything else?

Many thanks for porting Half-Life/GoldSrc :)

alfred-valve commented 11 years ago

Ah ha, Gentoo hey. Can you get the crash in GDB again and then post the output of "info sharedlibrary" please.

dscharrer commented 11 years ago

Sure:

Program received signal SIGSEGV, Segmentation fault.
Q_strlen (str=0xef3c40e0 <Address 0xef3c40e0 out of bounds>) at ../engine/common.c:212
212     ../engine/common.c: No such file or directory.
(gdb) info sharedlibrary
From        To          Syms Read   Shared Object Library
0x4eb378e0  0x4eb5039c  Yes         /lib/ld-linux.so.2
                        No          linux-gate.so.1
0xf7f0e880  0xf7f8179c  Yes         /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.0-pre9999/32/libstdc++.so.6
0x4ed28c00  0x4ed29b78  Yes         /lib32/libdl.so.2
0x4ed0f5e0  0x4ed1bfd8  Yes         /lib32/libpthread.so.0
0x4eb755a0  0x4ecaafbc  Yes         /lib32/libc.so.6
0x4eee3760  0x4ef0c118  Yes         /lib32/libm.so.6
0x46514520  0x46529084  Yes         /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.0-pre9999/32/libgcc_s.so.1
0xf6a68f20  0xf6bd2418  Yes         /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so
0xf7fcb5c0  0xf7fd5d74  Yes (*)     ./libsteam_api.so
0xf6946b50  0xf6967354  Yes         ./vgui.so
0xf68559c0  0xf68f4db8  Yes (*)     ./libsdl2-2.0.so.0
0xf67d96e0  0xf682b358  Yes (*)     ./libMiles.so
0x488f72e0  0x48912a38  Yes (*)     /usr/lib32/libfontconfig.so.1
0x4845d9c0  0x484c7e58  Yes (*)     /usr/lib32/libfreetype.so.6
0x46ae3df0  0x46b45e48  Yes (*)     /usr/lib32/libGL.so.1
0x4ee3bde0  0x4ee3f898  Yes         /lib32/librt.so.1
0xf673ef80  0xf67799d8  Yes (*)     /usr/lib32/libopenal.so.1
0x484f38f0  0x484fff18  Yes (*)     /lib32/libz.so.1
0x48924fe0  0x489321e8  Yes (*)     /lib32/libbz2.so.1
0x488c9200  0x488e2ae8  Yes (*)     /usr/lib32/libexpat.so.1
0x483a5980  0x483afcc8  Yes (*)     /usr/lib32/libXext.so.6
0x41f4ff60  0x41f53f20  Yes         /usr/lib32/libatiuki.so.1
0x485372b0  0x485c2ea8  Yes (*)     /usr/lib32/libX11.so.6
0x489535c0  0x48962d28  Yes (*)     /usr/lib32/libxcb.so.1
0x489689e0  0x48969748  Yes (*)     /usr/lib32/libXau.so.6
0x48865e80  0x48867aa8  Yes (*)     /usr/lib32/libXdmcp.so.6
0x4850aef0  0x48510528  Yes (*)     /usr/lib32/libXcursor.so.1
0x48941400  0x48946ea8  Yes (*)     /usr/lib32/libXrender.so.1
0x48b83f60  0x48b862d8  Yes (*)     /usr/lib32/libXfixes.so.3
0x484ec7d0  0x484ed1f8  Yes (*)     /usr/lib32/libXinerama.so.1
0x48b6e960  0x48b78aa8  Yes (*)     /usr/lib32/libXi.so.6
0x488bc500  0x488c20a8  Yes (*)     /usr/lib32/libXrandr.so.2
0xf6737930  0xf67386c8  Yes (*)     /usr/lib32/libXss.so.1
0xf6731b60  0xf6734578  Yes (*)     /usr/lib32/libXxf86vm.so.1
0xf44a2b40  0xf5e7d38c  Yes (*)     /usr/lib32/dri/fglrx_dri.so
0xf40ad600  0xf40e9f80  Yes         /usr/lib32/libatiadlxx.so
0xf2af0380  0xf35428ec  Yes (*)     /home/dscharrer/Games/Steam/linux32/steamclient.so
0xf20e38e0  0xf216c7e8  Yes (*)     /usr/lib32/libasound.so.2
0x489ad480  0x489b65a8  Yes (*)     /lib32/libudev.so.0
0xef0b9170  0xef1d3884  Yes         /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/chromehtml.so
0xec7996c0  0xede8e148  Yes (*)     ./libcef.so
0xf21b5b10  0xf21c177c  Yes         ./libtier0.so
0xf2199ca0  0xf21a6dc8  Yes         ./libvstdlib.so
0x4658e800  0x4682e928  Yes (*)     /usr/lib32/libgtk-x11-2.0.so.0
0x46922340  0x4697f1d8  Yes (*)     /usr/lib32/libgdk-x11-2.0.so.0
0x46533600  0x46538a28  Yes (*)     /usr/lib32/libpangocairo-1.0.so.0
0x489bf260  0x489d2b88  Yes (*)     /usr/lib32/libgdk_pixbuf-2.0.so.0
0x469b5360  0x46a5df98  Yes (*)     /usr/lib32/libcairo.so.2
0x4830f9f0  0x48331b38  Yes (*)     /usr/lib32/libpango-1.0.so.0
0x4835f290  0x4838fd78  Yes (*)     /usr/lib32/libgobject-2.0.so.0
0x4820eaf0  0x482abc88  Yes (*)     /usr/lib32/libglib-2.0.so.0
0xec4b70d0  0xec59fab8  Yes (*)     /usr/lib32/libnss3.so
0xec489840  0xec4989e8  Yes (*)     /usr/lib32/libnssutil3.so
0xec465180  0xec47f108  Yes (*)     /usr/lib32/libsmime3.so
0xf7fc1f00  0xf7fc38a8  Yes (*)     /usr/lib32/libplc4.so
0xec4320b0  0xec454ef8  Yes (*)     /usr/lib32/libnspr4.so
0xec3f8cf0  0xec4225b8  Yes (*)     /usr/lib32/libdbus-1.so.3
0xec3d2960  0xec3ed7d8  Yes (*)     /usr/lib32/libpng12.so.0
0xec38a320  0xec3c2908  Yes (*)     /usr/lib32/libcups.so.2
0xec30aaf0  0xec362f28  Yes (*)     /usr/lib32/libgcrypt.so.11
0x489a5890  0x489a6348  Yes (*)     /usr/lib32/libXcomposite.so.1
0x4839d800  0x4839e1b8  Yes (*)     /usr/lib32/libXdamage.so.1
0x48974a50  0x48982328  Yes (*)     /usr/lib32/libatk-1.0.so.0
0x48663350  0x48733118  Yes (*)     /usr/lib32/libgio-2.0.so.0
0x488402a0  0x4885d068  Yes (*)     /usr/lib32/libpangoft2-1.0.so.0
0x481f4c30  0x481f5ce8  Yes (*)     /usr/lib32/libgmodule-2.0.so.0
0x48871500  0x48890ed8  Yes (*)     /usr/lib32/libpng15.so.15
0x489def50  0x48a5e8d8  Yes (*)     /usr/lib32/libpixman-1.so.0
0x488a34b0  0x488b3468  Yes (*)     /usr/lib32/libEGL.so.1
0x48352430  0x48352618  Yes (*)     /usr/lib32/libgthread-2.0.so.0
0x48349f50  0x4834d4e8  Yes (*)     /usr/lib32/libffi.so.6
0xf7fbdb40  0xf7fbeb78  Yes (*)     /usr/lib32/libplds4.so
0xec2d6760  0xec2ffd28  Yes (*)     /usr/lib32/libgssapi_krb5.so.2
0xec2cb660  0xec2cbc58  Yes (*)     /usr/lib32/libgpg-error.so.0
0x4f0f1e00  0x4f0ff3b8  Yes         /lib32/libresolv.so.2
0x48b7e3a0  0x48b7e4f8  Yes (*)     /usr/lib32/libX11-xcb.so.1
0x483b5330  0x483b6798  Yes (*)     /usr/lib32/libxcb-dri2.so.0
0x48938d50  0x4893b0c8  Yes (*)     /usr/lib32/libxcb-xfixes.so.0
0x4899cb90  0x489a0218  Yes (*)     /usr/lib32/libxcb-render.so.0
0x48899b20  0x4889a7d8  Yes (*)     /usr/lib32/libxcb-shape.so.0
0x4898f850  0x48995578  Yes (*)     /usr/lib32/libdrm.so.2
0xec2277b0  0xec292ec8  Yes (*)     /usr/lib32/libkrb5.so.3
---Type <return> to continue, or q <return> to quit---
0xec1f3cd0  0xec20bc08  Yes (*)     /usr/lib32/libk5crypto.so.3
0xec1ede60  0xec1eeb88  Yes (*)     /lib32/libcom_err.so.2
0xec1e68a0  0xec1ea1d8  Yes (*)     /usr/lib32/libkrb5support.so.0
0xf7fb9ca0  0xf7fba968  Yes (*)     /lib32/libkeyutils.so.1
0xea10e380  0xea20e398  Yes (*)     /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/libffmpegsumo.so
0xe8e180e0  0xe8e1d318  Yes         /lib32/libnss_compat.so.2
0xe84e8c40  0xe84f5c78  Yes         /lib32/libnsl.so.1
0xeb601ea0  0xeb608578  Yes         /lib32/libnss_nis.so.2
0xe8e0afa0  0xe8e12af8  Yes         /lib32/libnss_files.so.2
0xe8e436e0  0xe8e43c88  Yes (*)     /usr/lib32/alsa-lib/libasound_module_rate_speexrate.so
0xe8e345b0  0xe8e400e8  Yes (*)     /usr/lib32/libspeexdsp.so.1
0xe8462060  0xe84958a8  Yes (*)     /usr/lib32/libpulse.so.0
0xeac029f0  0xeac06228  Yes (*)     /usr/lib32/libjson.so.0
0xe8411950  0xe844ba78  Yes (*)     /usr/lib32/libpulsecommon-1.1.so
0xe7aea6f0  0xe7af8928  Yes (*)     /usr/lib32/libICE.so.6
0xe9804460  0xe9808778  Yes (*)     /usr/lib32/libSM.so.6
0xe8e2dee0  0xe8e308b8  Yes (*)     /usr/lib32/libXtst.so.6
0xe7a824e0  0xe7ad2098  Yes (*)     /usr/lib32/libsndfile.so.1
0xe7a510b0  0xe7a79908  Yes (*)     /usr/lib32/libFLAC.so.8
0xe658ebb0  0xe6591038  Yes (*)     /usr/lib32/libvorbisenc.so.2
0xe7a21690  0xe7a35c98  Yes (*)     /usr/lib32/libvorbis.so.0
0xe7a19440  0xe7a1be88  Yes (*)     /usr/lib32/libogg.so.0
0xe7a11ef0  0xe7a156e8  Yes (*)     /usr/lib32/libgdbm.so.3
0xe7a0cfd0  0xe7a0eae8  Yes (*)     /lib32/libuuid.so.1
0xf7fe4940  0xf7ff0ef8  Yes         /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/filesystem_stdio.so
(*): Shared library is missing debugging information.

Hm, it doesn't seem to crash when resizing the window by dragging the corners though, only when changing fullscreen/windowed mode or resolution in the in-game settings.

alfred-valve commented 11 years ago

0xf6a68f20 0xf6bd2418 Yes /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so

That line is the problem, something about Gentoo is increasing the refcount on our engine binary, so when we unload it on restart it doesn't actually go away... I'm adding code to try to force the issue, but if you find out why Gentoo causes extra module references that would be interesting.

dscharrer commented 11 years ago

I think I know what is going on:

  1. hw.so exports BZ2_* symbols
  2. hw.so pulls in libfreetype.so.6 and libfontconfig.so.1
  3. On gentoo, both of these are compiled with bzip2 support (in the app-emulation/emul-linux-x86-xlibs-20121202 package)
  4. Because this is still in the dlopen() call for hw.so, the BZ2_* exports in hw.so overwrite those in libbzip2.so (even without RTLD_GLOBAL) and are linked against the BZ2_* imports in libfreetype.so.6
  5. libfreetype.so.6 (and libbzip2.so) now depends on hw.so
  6. hw.so can't be unloaded because libfreetype.so.6 is still used elsewhere

From the LD_DEBUG=all output:

3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_crc32Table'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_rNums'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_hbMakeCodeLengths'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzlibVersion'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzDecompressInit'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzDecompressEnd'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzReadClose'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzWriteOpen'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzCompressInit'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzCompressEnd'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_hbCreateDecodeTables'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_decompress'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzWriteClose'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzCompress'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzWrite'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_compressBlock'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bsInitWrite'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzDecompress'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_blockSort'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzWriteClose64'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_indexIntoF'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_hbAssignCodes'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzReadOpen'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzRead'
3113:   binding file /lib32/libbz2.so.1 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bz__AssertH__fail'
3113:   binding file /usr/lib32/libfreetype.so.6 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzDecompressInit'
3113:   binding file /usr/lib32/libfreetype.so.6 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzDecompressEnd'
3113:   binding file /usr/lib32/libfreetype.so.6 [0] to /home/dscharrer/Games/Steam/SteamApps/common/Half-Life/hw.so [0]: normal symbol `BZ2_bzDecompress'

Let me know if you need the full LD_DEBUG=all log - it's over 100 MiB.

readelf confirms the BZ2_* exports in hw.so (note the indices before the symbol names instead of UND for imports):

$ readelf -s hw.so | grep BZ2
    94: 002045d8   354 FUNC    GLOBAL DEFAULT   10 BZ2_bzDecompress
   107: 00205670    66 FUNC    GLOBAL DEFAULT   10 BZ2_bzread
   129: 00204b24   596 FUNC    GLOBAL DEFAULT   10 BZ2_bzWriteClose64
   289: 00202f58   517 FUNC    GLOBAL DEFAULT   10 BZ2_bzCompressInit
   341: 00208f18   671 FUNC    GLOBAL DEFAULT   10 BZ2_compressBlock
   342: 002056b4    53 FUNC    GLOBAL DEFAULT   10 BZ2_bzwrite
   347: 00203798   134 FUNC    GLOBAL DEFAULT   10 BZ2_bzCompressEnd
   908: 00205774    38 FUNC    GLOBAL DEFAULT   10 BZ2_bzerror
  1392: 00205630    29 FUNC    GLOBAL DEFAULT   10 BZ2_bzopen
  1570: 0020e3a8   234 FUNC    GLOBAL DEFAULT   10 BZ2_hbCreateDecodeTables
  1624: 002057d0    25 FUNC    GLOBAL DEFAULT   10 BZ2_bsInitWrite
  1655: 002c7740  2048 OBJECT  GLOBAL DEFAULT   21 BZ2_rNums
  2118: 00205248   254 FUNC    GLOBAL DEFAULT   10 BZ2_bzBuffToBuffCompress
  3071: 00202e60    72 FUNC    GLOBAL DEFAULT   10 BZ2_bz__AssertH__fail
  3572: 0020473c   148 FUNC    GLOBAL DEFAULT   10 BZ2_bzDecompressEnd
  3664: 00203820   241 FUNC    GLOBAL DEFAULT   10 BZ2_bzDecompressInit
  3913: 002051c4   132 FUNC    GLOBAL DEFAULT   10 BZ2_bzReadGetUnused
  3965: 00205650    29 FUNC    GLOBAL DEFAULT   10 BZ2_bzdopen
  3999: 002c7340  1024 OBJECT  GLOBAL DEFAULT   21 BZ2_crc32Table
  4017: 0020579c    52 FUNC    GLOBAL DEFAULT   10 BZ2_indexIntoF
  4284: 00203628   367 FUNC    GLOBAL DEFAULT   10 BZ2_bzCompress
  4512: 00205348   245 FUNC    GLOBAL DEFAULT   10 BZ2_bzBuffToBuffDecompres
  5220: 00205440     6 FUNC    GLOBAL DEFAULT   10 BZ2_bzlibVersion
  6119: 00204af0    51 FUNC    GLOBAL DEFAULT   10 BZ2_bzWriteClose
  6181: 0020ddb4   349 FUNC    GLOBAL DEFAULT   10 BZ2_blockSort
  6289: 00204d78   420 FUNC    GLOBAL DEFAULT   10 BZ2_bzReadOpen
  6297: 00204f9c   550 FUNC    GLOBAL DEFAULT   10 BZ2_bzRead
  6323: 0020df20  1085 FUNC    GLOBAL DEFAULT   10 BZ2_hbMakeCodeLengths
  6561: 002056ec     3 FUNC    GLOBAL DEFAULT   10 BZ2_bzflush
  6655: 00209204 12049 FUNC    GLOBAL DEFAULT   10 BZ2_decompress
  7133: 0020e360    72 FUNC    GLOBAL DEFAULT   10 BZ2_hbAssignCodes
  7314: 002056f0   131 FUNC    GLOBAL DEFAULT   10 BZ2_bzclose
  7571: 0020480c   325 FUNC    GLOBAL DEFAULT   10 BZ2_bzWriteOpen
  7717: 00204954   412 FUNC    GLOBAL DEFAULT   10 BZ2_bzWrite
  7773: 00204f1c   128 FUNC    GLOBAL DEFAULT   10 BZ2_bzReadClose
  1363: 002045d8   354 FUNC    GLOBAL DEFAULT   10 BZ2_bzDecompress
  1376: 00205670    66 FUNC    GLOBAL DEFAULT   10 BZ2_bzread
  1398: 00204b24   596 FUNC    GLOBAL DEFAULT   10 BZ2_bzWriteClose64
  1558: 00202f58   517 FUNC    GLOBAL DEFAULT   10 BZ2_bzCompressInit
  1610: 00208f18   671 FUNC    GLOBAL DEFAULT   10 BZ2_compressBlock
  1611: 002056b4    53 FUNC    GLOBAL DEFAULT   10 BZ2_bzwrite
  1616: 00203798   134 FUNC    GLOBAL DEFAULT   10 BZ2_bzCompressEnd
  2177: 00205774    38 FUNC    GLOBAL DEFAULT   10 BZ2_bzerror
  2661: 00205630    29 FUNC    GLOBAL DEFAULT   10 BZ2_bzopen
  2839: 0020e3a8   234 FUNC    GLOBAL DEFAULT   10 BZ2_hbCreateDecodeTables
  2893: 002057d0    25 FUNC    GLOBAL DEFAULT   10 BZ2_bsInitWrite
  2924: 002c7740  2048 OBJECT  GLOBAL DEFAULT   21 BZ2_rNums
  3387: 00205248   254 FUNC    GLOBAL DEFAULT   10 BZ2_bzBuffToBuffCompress
  4340: 00202e60    72 FUNC    GLOBAL DEFAULT   10 BZ2_bz__AssertH__fail
  4841: 0020473c   148 FUNC    GLOBAL DEFAULT   10 BZ2_bzDecompressEnd
  4933: 00203820   241 FUNC    GLOBAL DEFAULT   10 BZ2_bzDecompressInit
  5182: 002051c4   132 FUNC    GLOBAL DEFAULT   10 BZ2_bzReadGetUnused
  5234: 00205650    29 FUNC    GLOBAL DEFAULT   10 BZ2_bzdopen
  5268: 002c7340  1024 OBJECT  GLOBAL DEFAULT   21 BZ2_crc32Table
  5286: 0020579c    52 FUNC    GLOBAL DEFAULT   10 BZ2_indexIntoF
  5553: 00203628   367 FUNC    GLOBAL DEFAULT   10 BZ2_bzCompress
  5781: 00205348   245 FUNC    GLOBAL DEFAULT   10 BZ2_bzBuffToBuffDecompres
  6489: 00205440     6 FUNC    GLOBAL DEFAULT   10 BZ2_bzlibVersion
  7388: 00204af0    51 FUNC    GLOBAL DEFAULT   10 BZ2_bzWriteClose
  7450: 0020ddb4   349 FUNC    GLOBAL DEFAULT   10 BZ2_blockSort
  7558: 00204d78   420 FUNC    GLOBAL DEFAULT   10 BZ2_bzReadOpen
  7566: 00204f9c   550 FUNC    GLOBAL DEFAULT   10 BZ2_bzRead
  7592: 0020df20  1085 FUNC    GLOBAL DEFAULT   10 BZ2_hbMakeCodeLengths
  7830: 002056ec     3 FUNC    GLOBAL DEFAULT   10 BZ2_bzflush
  7924: 00209204 12049 FUNC    GLOBAL DEFAULT   10 BZ2_decompress
  8402: 0020e360    72 FUNC    GLOBAL DEFAULT   10 BZ2_hbAssignCodes
  8583: 002056f0   131 FUNC    GLOBAL DEFAULT   10 BZ2_bzclose
  8840: 0020480c   325 FUNC    GLOBAL DEFAULT   10 BZ2_bzWriteOpen
  8986: 00204954   412 FUNC    GLOBAL DEFAULT   10 BZ2_bzWrite
  9042: 00204f1c   128 FUNC    GLOBAL DEFAULT   10 BZ2_bzReadClose

Everything works on Ubuntu (for now) because their libfreetype.so.6 and libfontconfig.so.1 libraries are compiled without bzip2 support, so the BZ2_* symbols in hw.so aren't used there.

I also confirmed that LD_PRELOADing /lib32/libbz2.so.1 works around the issue by ensuring that the BZ2_* symbols in libbz2 take priority.

The client binaries probably should be compiled with the -fvisibility=hidden gcc flag and then only export the needed symbols.