protonscr

DawnOFWar3 crash due to 2.34 version libc.so doesn't support API __libc_dlopen_mode anymore

steamclosed 3rd party game
ValveSoftware/steam-for-linux#8278 · opened 2021-12-02 by JoeWangAMD · updated 2021-12-07 · 3 comments · github
JJoeWangAMD 2021-12-02 github

Your system information

  • Steam client version (build number or date): latest
  • Distribution (e.g. Ubuntu): Ubuntu 20.04.3 with 20.04.4 updates with AMDVLK driver
  • Opted into Steam client beta?: [Yes/No]No
  • Have you checked for system updates?: [Yes/No]Yes

Please describe your issue in as much detail as possible:

Problem:
When run DawnofWar3 with libc version 2.34, it just quit and report "_libc_dlopen_mode" symbol is not available

RootCause:
DawnofWar3 uses a private API __libc_dlopen_mode which is not supported by the libc 2.34 version.

Analysis:

  1. DawnOfWar3 is using API __libc_dlopen_mode
    readelf -all ./DawnOfWar3 | grep -i "dlopen"
    000006061b70 00b900000007 R_X86_64_JUMP_SLO 0000000000000000 __libc_dlopen_mode@GLIBC_PRIVATE + 0

  2. With 2.31 libc version (used on 5.11 kernel Ubuntu 20.4.3), Private API __libc_dlopen_mode is supported by libc
    readelf -all /lib/x86_64-linux-gnu/libc.so.6 | grep dlopen
    2269: 0000000000162930 195 FUNC GLOBAL DEFAULT 16 __libc_dlopen_mode@@GLIBC_PRIVATE

  3. With 2.34 libc version (used on 5.13 kernel Ubuntu 20.4.4), Private API __libc_dlopen_mode is NOT supported by libc
    readelf -all ./libc.so.6 | grep dlopen
    1885: 0000000000094570 154 FUNC GLOBAL DEFAULT 16 dlopen@@GLIBC_2.34

Suggestion:
DawnofWar3 should not use private API __libc_dlopen_mode( )

Steps for reproducing this issue:

  1. Set up ubuntu 20.04.4 system
    Ubuntu 20.04.4 Instructions (Using Impish Repos):

  2. Install Ubuntu 20.04.3 from ISO
    Update system via:
    sudo apt update && sudo apt dist-upgrade
    Reboot system via:
    sudo reboot

  3. Add Impish repositories:
    sudo bash -c "echo 'deb http://archive.ubuntu.com/ubuntu impish main restricted universe multiverse' > /etc/apt/sources.list.d/hirsute.list" && sudo apt update
    Update repos via:
    sudo apt update

  4. Install 5.13 kernel via:
    sudo apt install linux-generic-hwe-20.04-edge linux-headers-generic-hwe-20.04-edge linux-image-generic-hwe-20.04-edge linux-tools-generic-hwe-20.04-edge systemd
    Reboot system via:
    sudo reboot

  5. install AMDVLK driver from https://github.com/GPUOpen-Drivers/AMDVLK/releases/tag/v-2021.Q4.1

  6. run DawnOfWar3

Kkisak-valve maintainer 2021-12-02 github

Hello @JoeWangAMD, this issue should be reported to the linux port maintainers (Feral Interactive) if it hasn't been already.

JJoeWangAMD 2021-12-03 github

Hello @kisak-valve , thanks for your reply. I do have different opinion for this issue. APP should not use a libc private API. In this case, consider using public API dlopen( ) directly.

Ssmcv 2021-12-06 github

APP should not use a libc private API

I don't think anyone disagrees with that, but the only people who can prevent Dawn of War 3 from using a libc private API are the maintainers of the Linux port of Dawn of War 3, and that's Feral Interactive, not Valve.

Nothing extracted yet.