divVerent / s2tc

S2TC - a subset of a wellknown texture compression scheme (actually Color Cell Compression)
https://github.com/divVerent/s2tc/wiki
Other
43 stars 6 forks source link

SIGSEGV #8

Open iam-TJ opened 8 years ago

iam-TJ commented 8 years ago

Whilst helping an Ubuntu user we found that the library causes a segmentation fault for Unreal Tournament 1999 the user was trying to play. We found un-installing the libtxc-dxtn-s2tc0 library solved the SIGSEGV but I said I'd report the back-trace upstream in case it can be figured out and fixed.

# apt-cache policy libtxc-dxtn-s2tc0:i386
libtxc-dxtn-s2tc0:i386:
  Installed: (none)
  Candidate: 0~git20131104-1.1
  Version table:
     0~git20131104-1.1 0
        500 http://se.archive.ubuntu.com/ubuntu/ trusty/main i386 Packages
        100 /var/lib/dpkg/status

$ gdb ./ut-bin 
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
...
Reading symbols from ./ut-bin...(no debugging symbols found)...done.
(gdb) run
--- Segmentation Fault ----
(gdb) bt
#0  0xf3e62e20 in ?? () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#1  0xf3df21eb in bool std::has_facet<std::ctype<char> >(std::locale const&) ()
   from /usr/lib/i386-linux-gnu/libstdc++.so.6
#2  0xf3de5821 in std::basic_ios<char, std::char_traits<char> >::_M_cache_locale(std::locale const&)
    () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#3  0xf3de5990 in std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*) () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#4  0xf3dd60fc in std::ios_base::Init::Init() () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#5  0xf34fe8ae in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535)
    at /usr/include/c++/4.8/iostream:74
#6  _GLOBAL__sub_I_s2tc_algorithm.cpp(void) () at s2tc_algorithm.cpp:1459
#7  0xf7fead77 in ?? () from /lib/ld-linux.so.2
#8  0xf7feae64 in ?? () from /lib/ld-linux.so.2
#9  0xf7feee8e in ?? () from /lib/ld-linux.so.2
#10 0xf7feac26 in ?? () from /lib/ld-linux.so.2
#11 0xf7fee684 in ?? () from /lib/ld-linux.so.2
#12 0xf7fb78d1 in ?? () from /lib/i386-linux-gnu/libdl.so.2
#13 0xf7feac26 in ?? () from /lib/ld-linux.so.2
#14 0xf7fb737c in ?? () from /lib/i386-linux-gnu/libdl.so.2
#15 0xf7fb794c in dlopen () from /lib/i386-linux-gnu/libdl.so.2
#16 0xf58ec323 in util_dl_open () from /usr/lib/i386-linux-gnu/libgallium.so.0
#17 0xf58f0ac6 in util_format_s3tc_init () from /usr/lib/i386-linux-gnu/libgallium.so.0
#18 0xf5ee64c9 in ?? () from /usr/lib/i386-linux-gnu/dri/r600_dri.so
#19 0xf5e8666b in ?? () from /usr/lib/i386-linux-gnu/dri/r600_dri.so
#20 0xf5c6b788 in ?? () from /usr/lib/i386-linux-gnu/dri/r600_dri.so
#21 0xf5ef307c in ?? () from /usr/lib/i386-linux-gnu/dri/r600_dri.so
#22 0xf5c6c966 in ?? () from /usr/lib/i386-linux-gnu/dri/r600_dri.so
#23 0xf6a53113 in ?? () from /usr/lib/i386-linux-gnu/mesa/libGL.so.1
#24 0xf6a2bd44 in ?? () from /usr/lib/i386-linux-gnu/mesa/libGL.so.1
#25 0xf6a282ed in ?? () from /usr/lib/i386-linux-gnu/mesa/libGL.so.1
#26 0xf6a28b6e in glXChooseVisual () from /usr/lib/i386-linux-gnu/mesa/libGL.so.1
#27 0xf7b475d7 in X11_GL_GetVisual () from ./libSDL-1.1.so.0
#28 0xf7b4af82 in ?? () from ./libSDL-1.1.so.0
#29 0xf7b4b73b in ?? () from ./libSDL-1.1.so.0
#30 0xf7b421af in SDL_SetVideoMode () from ./libSDL-1.1.so.0
#31 0xf7fce67a in USDLViewport::ResizeViewport(unsigned int, int, int, int) () from ./SDLDrv.so
#32 0xf6b34e2b in UOpenGLRenderDevice::SetRes(int, int, int, int) () from ./OpenGLDrv.so
#33 0xf6b34b17 in UOpenGLRenderDevice::Init(UViewport *, int, int, int, int) () from ./OpenGLDrv.so
#34 0xf7fce1ed in USDLViewport::TryRenderDevice(char const *, int, int, int, int) () from ./SDLDrv.so
#35 0xf7fcef97 in USDLViewport::OpenWindow(unsigned int, int, int, int, int, int) () from ./SDLDrv.so
#36 0xf7de33a2 in UGameEngine::Init(void) () from ./Engine.so
#37 0x0804d7a6 in _start ()
divVerent commented 8 years ago

From the backtrace this looks like it's caused by loading the s2tc library without even calling it yet. It looks like a conflict between your version of libstdc++ and UT.

Now I see two ways of solving it:

I will see if there is anything obvious to be done there soon.

On Tue, Nov 10, 2015, 13:42 TJ notifications@github.com wrote:

Whilst helping an Ubuntu user we found that the library causes a segmentation fault for Unreal Tournament 1999 the user was trying to play. We found un-installing the libtxc-dxtn-s2tc0 library solved the SIGSEGV but I said I'd report the back-trace upstream in case it can be figured out and fixed.

$ gdb ./ut-bin GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1 ... Reading symbols from ./ut-bin...(no debugging symbols found)...done. (gdb) run --- Segmentation Fault ---- (gdb) bt

0 0xf3e62e20 in ?? () from /usr/lib/i386-linux-gnu/libstdc++.so.6

1 0xf3df21eb in bool std::has_facetstd::ctype(std::locale const&) ()

from /usr/lib/i386-linux-gnu/libstdc++.so.6

2 0xf3de5821 in std::basic_ios<char, std::char_traits >::_M_cache_locale(std::locale const&)

() from /usr/lib/i386-linux-gnu/libstdc++.so.6

3 0xf3de5990 in std::basic_ios<char, std::char_traits >::init(std::basic_streambuf<char, std::char_traits >*) () from /usr/lib/i386-linux-gnu/libstdc++.so.6

4 0xf3dd60fc in std::ios_base::Init::Init() () from /usr/lib/i386-linux-gnu/libstdc++.so.6

5 0xf34fe8ae in static_initialization_and_destruction_0 (initialize_p=1, __priority=65535)

at /usr/include/c++/4.8/iostream:74

6 _GLOBAL__sub_I_s2tc_algorithm.cpp(void) () at s2tc_algorithm.cpp:1459

7 0xf7fead77 in ?? () from /lib/ld-linux.so.2

8 0xf7feae64 in ?? () from /lib/ld-linux.so.2

9 0xf7feee8e in ?? () from /lib/ld-linux.so.2

10 0xf7feac26 in ?? () from /lib/ld-linux.so.2

11 0xf7fee684 in ?? () from /lib/ld-linux.so.2

12 0xf7fb78d1 in ?? () from /lib/i386-linux-gnu/libdl.so.2

13 0xf7feac26 in ?? () from /lib/ld-linux.so.2

14 0xf7fb737c in ?? () from /lib/i386-linux-gnu/libdl.so.2

15 0xf7fb794c in dlopen () from /lib/i386-linux-gnu/libdl.so.2

16 0xf58ec323 in util_dl_open () from /usr/lib/i386-linux-gnu/libgallium.so.0

17 0xf58f0ac6 in util_format_s3tc_init () from /usr/lib/i386-linux-gnu/libgallium.so.0

18 0xf5ee64c9 in ?? () from /usr/lib/i386-linux-gnu/dri/r600_dri.so

19 0xf5e8666b in ?? () from /usr/lib/i386-linux-gnu/dri/r600_dri.so

20 0xf5c6b788 in ?? () from /usr/lib/i386-linux-gnu/dri/r600_dri.so

21 0xf5ef307c in ?? () from /usr/lib/i386-linux-gnu/dri/r600_dri.so

22 0xf5c6c966 in ?? () from /usr/lib/i386-linux-gnu/dri/r600_dri.so

23 0xf6a53113 in ?? () from /usr/lib/i386-linux-gnu/mesa/libGL.so.1

24 0xf6a2bd44 in ?? () from /usr/lib/i386-linux-gnu/mesa/libGL.so.1

25 0xf6a282ed in ?? () from /usr/lib/i386-linux-gnu/mesa/libGL.so.1

26 0xf6a28b6e in glXChooseVisual () from /usr/lib/i386-linux-gnu/mesa/libGL.so.1

27 0xf7b475d7 in X11_GL_GetVisual () from ./libSDL-1.1.so.0

28 0xf7b4af82 in ?? () from ./libSDL-1.1.so.0

29 0xf7b4b73b in ?? () from ./libSDL-1.1.so.0

30 0xf7b421af in SDL_SetVideoMode () from ./libSDL-1.1.so.0

31 0xf7fce67a in USDLViewport::ResizeViewport(unsigned int, int, int, int) () from ./SDLDrv.so

32 0xf6b34e2b in UOpenGLRenderDevice::SetRes(int, int, int, int) () from ./OpenGLDrv.so

33 0xf6b34b17 in UOpenGLRenderDevice::Init(UViewport *, int, int, int, int) () from ./OpenGLDrv.so

34 0xf7fce1ed in USDLViewport::TryRenderDevice(char const *, int, int, int, int) () from ./SDLDrv.so

35 0xf7fcef97 in USDLViewport::OpenWindow(unsigned int, int, int, int, int, int) () from ./SDLDrv.so

36 0xf7de33a2 in UGameEngine::Init(void) () from ./Engine.so

37 0x0804d7a6 in _start ()

— Reply to this email directly or view it on GitHub https://github.com/divVerent/s2tc/issues/8.

divVerent commented 8 years ago

I think I just pushed a change that should help.

Essentially, the dependency on libstdc++ is gone now. Was a bit tricky to tell libtool that.

divVerent commented 8 years ago

Just verified - the library no longer links to the standard C++ library, and it can be successfully used from pure C binaries too. Closing this, as I am very sure this fixes your segfault.

divVerent commented 8 years ago

Or actually: reopening, as this seems reason enough to create a new release.