View Single Post
Old 10-30-10, 07:42 PM   #1
Anssi
Mageia packager
 
Join Date: Mar 2005
Location: Tampere, Finland
Posts: 45
Send a message via MSN to Anssi
Default Crash regressions with 260.xx NVIDIA OpenGL library

Hi all!
There are several seemingly related crasher regressions related to using the 260.xx driver version.

First, a simple issue of
Code:
SDL_Init(SDL_INIT_AUDIO);
call segfaulting (backtrace attached) (nothing else needed in main()).

It requires at least the following conditions:
  • the binary has to be linked with libGL (i.e. -lGL in addition to -lSDL)
  • pulseaudio has to installed (tested: 0.9.21) but *not* running (autospawn can be enabled or disabled)
  • SDL has to be built with pulse support (tested: 1.2.14, pulse support in dlopen mode)
  • SDL has to be using the pulse driver (either by having patched the pulse priority above alsa like Mandriva, or using SDL_AUDIODRIVER=pulse)
  • must not be running under gdb
  • must not be running under __GL_SINGLE_THREADED=1
  • must be using NVIDIA GL library from 260.x driver (256.x does not crash)
  • if glibc (tested: 2.11.1, 2.12.1) was built with GCC 4.5.1, testcase needs to also be linked with -lpulse to make the crash happen (when glibc is built with either GCC 4.4.3 or GCC 4.4.5, the testcase crashes even without -lpulse)
  • glibc has to be built with -O2 optimization, which includes -falign-functions (this means that using e.g. "-O1" or "-O2 -fno-align-functions" to build glibc will avoid the crash)

Especially the last several conditions seem quite interesting, but I guess they could be just coincidental.
I've confirmed the issue on Mandriva cooker x86_64 and Mandriva 2010.1 x86_64 systems (plus 2010.1 32bit chroot), and I've gotten reports from others indicating their Mandriva 2010.1 x86_64 and Fedora 32-bit installations are also affected (and here's another Fedora 32-bit affected: http://forum.xbmc.org/showthread.php?t=83924).

The issue is reproducable also in a simple chroot environment (tested: Mandriva 2010.1 64bit and Mandriva 2010.1 32bit) without any NVIDIA hardware / X server, where you only have the NVIDIA GL library installed.
I've also put an affected chroot tarball available: http://onse.fi/files/2010.1-x86_64-N...DLtest.tar.bz2 (279MB)
The test program (as described above, only calling SDL_Init(SDL_INIT_AUDIO)) is in /home/anssi/SDLtest.c, which can simply by compiled with
Code:
gcc -o SDLtest SDLtest.c -lSDL -lGL
gcc -o SDLtest+pulse SDLtest.c -lSDL -lGL -lpulse
The chroot contains glibc 2.11.1 compiled with gcc 4.4.3 and therefore both "SDLtest" and "SDLtest+pulse" variants crash. Note that you have to mount /proc inside the chroot, or the crash will not happen.

There is also a related (260.x only) crash when trying to use VDPAU in xbmc (backtrace attached). I've not debugged this one in detail, but it seems that building glibc with -fno-align-functions will workaround this one as well. However, using __GL_SINGLE_THREADED=1 has no effect, and the crash happens regardless.

Attached is also nvidia-bug-report.log.gz from one of the system experiencing this issue. Kernels tested were 2.6.36 and 2.6.35.4.

Feel free to ask for any additional information.
Attached Files
File Type: txt SDLtest-backtrace.txt (1.8 KB, 84 views)
File Type: txt SDLtest.c.txt (97 Bytes, 83 views)
File Type: txt xbmc-vdpau-backtrace.txt (11.0 KB, 103 views)
File Type: gz nvidia-bug-report.log.gz (67.6 KB, 57 views)
__________________
Anssi Hannula (anssi@mageia.org)
Mageia packager of NVIDIA drivers
XBMC developer

Last edited by Anssi; 11-01-10 at 07:23 PM. Reason: fixed conditions: happens even with pulseaudio autospawn enabled, also needs SDL pulse driver selection
Anssi is offline   Reply With Quote