KhronosGroup / KhronosGroup/glslang

segmentation fault under Haiku

Open
#4,076 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
3.6k
Forks
989
Avg merge
1d 2h
Merged PRs (30d)
31

Description

Getting segmentation faults from glslangValidator on Haiku while compiling the latest Mesa.

```
/Data/Code/mesa> gdb /Data/Code/glslang/build/StandAlone/glslangValidator
GNU gdb (GDB) 15.1
Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-unknown-haiku".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.

For help, type "help".
Type "apropos word" to search for commands related to "word"...

Reading symbols from /Data/Code/glslang/build/StandAlone/glslangValidator...
(gdb) run -V --target-env spirv1.5 -x -o src/vulkan/runtime/radix_sort/shaders/init.comp.spv.h src/vulkan/runtime/radix_sort/shaders/init.comp -DRS_KEYVAL_DWORDS=2

Starting program: /Data/Code/glslang/build/StandAlone/glslangValidator -V --target-env spirv1.5 -x -o src/vulkan/runtime/radix_sort/shaders/init.comp.spv.h src/vulkan/runtime/radix_sort/shaders/init.comp -DRS_KEYVAL_DWORDS=2
setpgrp failed in child: No such process
src/vulkan/runtime/radix_sort/shaders/init.comp
Thread 57449 caused an exception: Segment violation

Program received signal SIGSEGV, Segmentation fault.
0x0000000000789cb6 in std::basic_string, glslang::pool_allocator >::size (this=0x5252398)
at /boot/system/develop/tools/lib/gcc/x86_64-unknown-haiku/13.3.0/include/c++/bits/cow_string.h:922
922 return _M_rep()->_M_length;
(gdb) bt
#0 0x0000000000789cb6 in std::basic_string, glslang::pool_allocator >::size (this=0x5252398)
at /boot/system/develop/tools/lib/gcc/x86_64-unknown-haiku/13.3.0/include/c++/bits/cow_string.h:922
#1 0x000000000078a538 in std::operator==, glslang::pool_allocator > (__lhs=..., __rhs=...)
at /boot/system/develop/tools/lib/gcc/x86_64-unknown-haiku/13.3.0/include/c++/bits/basic_string.h:3714
#2 0x0000000000895038 in operator() (__closure=0x7f0001083a48, i=...) at /Data/Code/glslang/glslang/MachineIndependent/SymbolTable.cpp:304
#3 0x00000000008966f2 in __gnu_cxx::__ops::_Iter_pred, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >&)> >::operator()<__gnu_cxx::__normal_iterator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >*, std::vector, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >, glslang::pool_allocator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > > > > > >(__gnu_cxx::__normal_iterator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >*, std::vector, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >, glslang::pool_allocator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > > > > >) (
this=0x7f0001083a48, __it=...) at /boot/system/develop/tools/lib/gcc/x86_64-unknown-haiku/13.3.0/include/c++/bits/predefined_ops.h:318
#4 0x00000000008964a2 in std::__find_if<__gnu_cxx::__normal_iterator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >*, std::vector, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >, glslang::pool_allocator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > > > > >, __gnu_cxx::__ops::_Iter_pred, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >&)> > >(__gnu_cxx::__normal_iterator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >*, std::vector, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >, glslang::pool_allocator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > > > > >, __gnu_cxx::__normal_iterator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >*, std::vector, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >, glslang::pool_allocator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > > > > >, __gnu_cxx::__ops::_Iter_pred, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >&)> >, std::random_access_iterator_tag) (__first=..., __last=..., __pred=...)
at /boot/system/develop/tools/lib/gcc/x86_64-unknown-haiku/13.3.0/include/c++/bits/stl_algobase.h:2097
#5 0x00000000008962aa in std::__find_if<__gnu_cxx::__normal_iterator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >*, std::vector, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >, glslang::pool_allocator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > > > > >, __gnu_cxx::__ops::_Iter_pred, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >&)> > >(__gnu_cxx::__normal_iterator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >*, std::vector, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >, glslang::pool_allocator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > > > > >, __gnu_cxx::__normal_iterator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >*, std::vector, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >, glslang::pool_allocator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > > > > >, __gnu_cxx::__ops::_Iter_pred, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >&)> >) (__first=..., __last=..., __pred=...)
at /boot/system/develop/tools/lib/gcc/x86_64-unknown-haiku/13.3.0/include/c++/bits/stl_algobase.h:2117
#6 0x0000000000896214 in std::find_if<__gnu_cxx::__normal_iterator, glslang::pool_allocator >, std::basic_string for more, q to quit, c to continue without paging--
char_traits, glslang::pool_allocator > >*, std::vector, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >, glslang::pool_allocator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > > > > >, glslang::TSymbolTableLevel::~TSymbolTableLevel()::, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >&)> >(__gnu_cxx::__normal_iterator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >*, std::vector, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >, glslang::pool_allocator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > > > > >, __gnu_cxx::__normal_iterator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >*, std::vector, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > >, glslang::pool_allocator, glslang::pool_allocator >, std::basic_string, glslang::pool_allocator > > > > >, struct {...}) (__first=..., __last=..., __pred=...) at /boot/system/develop/tools/lib/gcc/x86_64-unknown-haiku/13.3.0/include/c++/bits/stl_algo.h:3923
#7 0x00000000008950a3 in glslang::TSymbolTableLevel::~TSymbolTableLevel (this=0x5252298, __in_chrg=) at /Data/Code/glslang/glslang/MachineIndependent/SymbolTable.cpp:303
#8 0x000000000078949a in glslang::TSymbolTable::pop (this=0x169b5a0, p=0x0) at /Data/Code/glslang/glslang/MachineIndependent/SymbolTable.h:703
#9 0x000000000087d543 in glslang::TSymbolTable::~TSymbolTable (this=0x169b5a0, __in_chrg=) at /Data/Code/glslang/glslang/MachineIndependent/SymbolTable.h:638
#10 0x0000000000876d97 in ShFinalize () at /Data/Code/glslang/glslang/MachineIndependent/ShaderLang.cpp:1405
#11 0x0000000000877950 in glslang::FinalizeProcess () at /Data/Code/glslang/glslang/MachineIndependent/ShaderLang.cpp:1726
#12 0x0000000000630b07 in ?? ()
#13 0x0000000000122f80 in ?? ()
#14 0x0000000000651de0 in ?? ()
#15 0x000000000169c068 in ?? ()
#16 0x000000000169b018 in ?? ()
#17 0x00007f0001083be8 in ?? ()
#18 0x00007f0001083c20 in ?? ()
#19 0x00007f0001083be8 in ?? ()
#20 0x00007f0001083be8 in ?? ()
#21 0x00007f0001083bf4 in ?? ()
#22 0x00007f0001083be8 in ?? ()
#23 0x00007f0001083c60 in ?? ()
#24 0x0000000000000000 in ?? ()
(gdb)

/Data/Code/mesa> /Data/Code/glslang/build/StandAlone/glslangValidator --version
Glslang Version: 11:16.0.0
ESSL Version: OpenGL ES GLSL 3.20 glslang Khronos. 16.0.0
GLSL Version: 4.60 glslang Khronos. 16.0.0
SPIR-V Version 0x00010600, Revision 1
GLSL.std.450 Version 100, Revision 1
Khronos Tool ID 8
SPIR-V Generator Version 11
GL_KHR_vulkan_glsl version 100
ARB_GL_gl_spirv version 100
```

Contributor guide

Open the contributing guide

Research direction

Reproduce the failure on Haiku with the glslangValidator command shown in the issue, then start at glslang/MachineIndependent/SymbolTable.cpp:303 and the related definitions in SymbolTable.h. Use the supplied backtrace to investigate the crash during symbol-table cleanup; done means the command completes without a segmentation fault.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
compilers, operating-systems
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.