Package: glx-diversions Version: 0.2.1 Severity: normal When using the binary nvidia drivers with the current glx-diversions setup, function calls to glXGetProcAddress causes programs to crash with a segmentation fault.
In a private discussion with Andreas Beckmann, I understood that the current diversion mechanism works as follows: - libGL.so always points to mesa-diverted - libGL.so.1 points to the binary driver This forces programs to link to the mesa library by default, so that no symbols from the proprietary driver are brought in. This is _very_ sensible, but has some drawbacks: - This causes programs dynloading "libGL.so" to fail. Several dynamic languages are doing it, notably lisp environment and in particular the "cl-opengl" package, which currently fails only on Debian because of this. While I agree that opening the proper soname (libGL.so.1) is the way to go, determining it at "runtime" for a dynamic language *is* a problem. Afterall, libGL.so is expected to point at the default GL libs. Fixing cl-opengl is easy in this case (simply loading libGL.so.1 fixes the issue), but kind of unexpected. - Second issue is more complicated. This link group breaks all applications using libgtkglext1. I didn't debug it fully yet to understand why. Please see bug #337022: all calls to glXGetProcAddress (or the gdk equivalent gdk_gl_get_proc_address) fail with a segmentation fault. Replacing the libGL.so link to point to libGL.so.1 (to the nvidia driver directly) fixes the issue. To reproduce the issue simply dowload the source of libgtkglext1, build the package, cd into examples and make coolwave. I'm attaching both strace and ltrace output of the output of coolwave with the default link group. It seems that someone (maybe the binary driver itself?) is trying to load libGL.so at runtime. Given that libGL.so.1 is already loaded, after calling functions in libGL.so some internal state gets (and rightfully so) corrupted. I was left wondering though, if some packages are failing to get GL extensions and degrade gracefully, thus giving me a subpar experience. I know of at least one case (http://factorcode.org/) where the "GL demos" do work and _are_ accellerated by the binary driver, but all GL extensions are disabled because dynamic loading "silently" fails. Tricky. -- Package-specific info: Diversions: diversion of /usr/lib/i386-linux-gnu/libGL.so to /usr/lib/mesa-diverted/i386-linux-gnu/libGL.so by glx-diversions diversion of /usr/lib/i386-linux-gnu/libGL.so.1 to /usr/lib/mesa-diverted/i386-linux-gnu/libGL.so.1 by glx-diversions diversion of /usr/lib/i386-linux-gnu/libGL.so.1.2 to /usr/lib/mesa-diverted/i386-linux-gnu/libGL.so.1.2 by glx-diversions diversion of /usr/lib/libGL.so to /usr/lib/mesa-diverted/libGL.so by glx-diversions diversion of /usr/lib/libGL.so.1 to /usr/lib/mesa-diverted/libGL.so.1 by glx-diversions diversion of /usr/lib/libGL.so.1.2 to /usr/lib/mesa-diverted/libGL.so.1.2 by glx-diversions diversion of /usr/lib/x86_64-linux-gnu/libGL.so to /usr/lib/mesa-diverted/x86_64-linux-gnu/libGL.so by glx-diversions diversion of /usr/lib/x86_64-linux-gnu/libGL.so.1 to /usr/lib/mesa-diverted/x86_64-linux-gnu/libGL.so.1 by glx-diversions diversion of /usr/lib/x86_64-linux-gnu/libGL.so.1.2 to /usr/lib/mesa-diverted/x86_64-linux-gnu/libGL.so.1.2 by glx-diversions /usr/lib/mesa-diverted: total 100 drwxr-xr-x 4 root root 72 Sep 5 2011 . drwxr-xr-x 130 root root 77824 Mar 13 11:27 .. drwxr-xr-x 2 root root 6 Jun 26 2011 i386-linux-gnu lrwxrwxrwx 1 root root 33 Jul 21 2011 libGL.so-master -> /etc/alternatives/libGL.so-master drwxr-xr-x 2 root root 57 Dec 13 10:56 x86_64-linux-gnu /usr/lib/mesa-diverted/i386-linux-gnu/: total 0 drwxr-xr-x 2 root root 6 Jun 26 2011 . drwxr-xr-x 4 root root 72 Sep 5 2011 .. /usr/lib/mesa-diverted/x86_64-linux-gnu/: total 356 drwxr-xr-x 2 root root 57 Dec 13 10:56 . drwxr-xr-x 4 root root 72 Sep 5 2011 .. lrwxrwxrwx 1 root root 10 Dec 11 15:54 libGL.so -> libGL.so.1 lrwxrwxrwx 1 root root 12 Dec 11 15:54 libGL.so.1 -> libGL.so.1.2 -rw-r--r-- 1 root root 363920 Dec 11 15:54 libGL.so.1.2 Alternative 'glx': glx - auto mode link currently points to /usr/lib/nvidia /usr/lib/mesa-diverted - priority 5 slave glx--libGL.so.1-x86_64-linux-gnu: /usr/lib/mesa-diverted/x86_64-linux-gnu/libGL.so.1 /usr/lib/nvidia - priority 100 slave glx--libGL.so.1-x86_64-linux-gnu: /usr/lib/x86_64-linux-gnu/nvidia/libGL.so.1 slave glx--libXvMCNVIDIA.so.1-x86_64-linux-gnu: /usr/lib/x86_64-linux-gnu/nvidia/libXvMCNVIDIA.so.1 slave glx--libXvMCNVIDIA_dynamic.so.1-x86_64-linux-gnu: /usr/lib/x86_64-linux-gnu/nvidia/libXvMCNVIDIA_dynamic.so.1 slave glx--libnvidia-cfg.so.1-x86_64-linux-gnu: /usr/lib/x86_64-linux-gnu/nvidia/libnvidia-cfg.so.1 slave glx--linux-libglx.so: /usr/lib/nvidia/libglx.so slave glx--nvidia-bug-report.sh: /usr/lib/nvidia/nvidia-bug-report.sh slave glx--nvidia_drv.so: /usr/lib/nvidia/nvidia_drv.so Current 'best' version is '/usr/lib/nvidia'. lrwxrwxrwx 1 root root 15 Feb 23 17:08 /etc/alternatives/glx -> /usr/lib/nvidia lrwxrwxrwx 1 root root 48 Jul 21 2011 /etc/alternatives/glx--libGL.so-x86_64-linux-gnu -> /usr/lib/mesa-diverted/x86_64-linux-gnu/libGL.so lrwxrwxrwx 1 root root 43 Feb 23 17:08 /etc/alternatives/glx--libGL.so.1-x86_64-linux-gnu -> /usr/lib/x86_64-linux-gnu/nvidia/libGL.so.1 lrwxrwxrwx 1 root root 51 Feb 23 17:08 /etc/alternatives/glx--libXvMCNVIDIA.so.1-x86_64-linux-gnu -> /usr/lib/x86_64-linux-gnu/nvidia/libXvMCNVIDIA.so.1 lrwxrwxrwx 1 root root 59 Feb 23 17:08 /etc/alternatives/glx--libXvMCNVIDIA_dynamic.so.1-x86_64-linux-gnu -> /usr/lib/x86_64-linux-gnu/nvidia/libXvMCNVIDIA_dynamic.so.1 lrwxrwxrwx 1 root root 51 Feb 23 17:08 /etc/alternatives/glx--libnvidia-cfg.so.1-x86_64-linux-gnu -> /usr/lib/x86_64-linux-gnu/nvidia/libnvidia-cfg.so.1 lrwxrwxrwx 1 root root 25 Feb 23 17:08 /etc/alternatives/glx--linux-libglx.so -> /usr/lib/nvidia/libglx.so lrwxrwxrwx 1 root root 36 Feb 23 17:08 /etc/alternatives/glx--nvidia-bug-report.sh -> /usr/lib/nvidia/nvidia-bug-report.sh lrwxrwxrwx 1 root root 29 Feb 23 17:08 /etc/alternatives/glx--nvidia_drv.so -> /usr/lib/nvidia/nvidia_drv.so File System: lrwxrwxrwx 1 root root 21 Sep 5 2011 /usr/lib/glx -> /etc/alternatives/glx lrwxrwxrwx 1 root root 50 Sep 5 2011 /usr/lib/x86_64-linux-gnu/libGL.so.1 -> /etc/alternatives/glx--libGL.so.1-x86_64-linux-gnu -rw-r--r-- 1 root root 402824 Mar 5 00:44 /usr/lib/xorg/modules/extensions/libglx.so -- System Information: Debian Release: wheezy/sid APT prefers unstable APT policy: (900, 'unstable'), (800, 'experimental') Architecture: amd64 (x86_64) Kernel: Linux 3.2.0-2-amd64 (SMP w/2 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages glx-diversions depends on: ii dpkg 1.16.1.2 ii nvidia-installer-cleanup 20111111+3 Versions of packages glx-diversions recommends: ii glx-alternative-mesa 0.2.1 glx-diversions suggests no packages. Versions of packages nvidia-glx depends on: ii dpkg 1.16.1.2 ii libgl1-nvidia-glx 295.20-1 ii nvidia-alternative 295.20-1 ii nvidia-installer-cleanup 20111111+3 ii nvidia-kernel-dkms [nvidia-kernel-295.20] 295.20-1 ii nvidia-support 20111111+3 ii nvidia-vdpau-driver 295.20-1 ii xserver-xorg-video-nvidia 295.20-1 Versions of packages nvidia-glx suggests: ii nvidia-kernel-dkms [nvidia-kernel-dkms] 295.20-1 ii nvidia-settings 295.20-1 Versions of packages glx-diversions is related to: ii glx-alternative-fglrx <none> ii glx-alternative-mesa 0.2.1 ii glx-alternative-nvidia 0.2.1 ii libgl1-dev <none> ii libgl1-mesa-glx [libgl1] 7.11.2-1 ii libgl1-nvidia-glx [libgl1-nvidia-glx-any] 295.20-1 ii nvidia-glx [nvidia-glx-any] 295.20-1 ii xserver-xorg-video-nvidia [xserver-xorg-video-nvidia-any] 295.20-1 -- no debconf information
coolwave-ltrace.log.gz
Description: GNU Zip compressed data
coolwave-strace.log.gz
Description: GNU Zip compressed data