[Bug 108498] ir_dereference_record nullptr segfault in radeonsi_dri.so

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Bug ID 108498
Summary ir_dereference_record nullptr segfault in radeonsi_dri.so
Product Mesa
Version 18.1
Hardware x86-64 (AMD64)
OS Linux (All)
Status NEW
Severity normal
Priority medium
Component Drivers/Gallium/radeonsi
Assignee dri-devel@lists.freedesktop.org
Reporter claude@mathr.co.uk
QA Contact dri-devel@lists.freedesktop.org

Created attachment 142095 [details]
tarball of GLSL source code for use in Fragmentarium

I'm using $ apt-cache policy libgl1-mesa-dri
libgl1-mesa-dri:
  Installed: 18.1.7-1
  Candidate: 18.1.7-1
  Version table:
     18.2.0-1 1
          1 http://ftp.uk.debian.org/debian experimental/main amd64 Packages
     18.1.9-1 500
        500 http://ftp.uk.debian.org/debian unstable/main amd64 Packages
 *** 18.1.7-1 990
        990 http://ftp.uk.debian.org/debian buster/main amd64 Packages
        100 /var/lib/dpkg/status

I will try to compile upstream Mesa soon to see if it is a Debian-specific
issue, or whether it has already been fixed in a later version.


Fragmentarium (from https://github.com/3Dickulus/FragM ) crashes inside
radeonsi_dri.so when I try to compile part of a large shader project (~50kB of
GLSL transcluded from the main 'raymond/example.frag').  The problematic part
is the last half of 'raymond/Raymond-Trace.frag' in the attached tarball,
setting #if 0 stops it from crashing and emits an error message in the shader
compile log about missing function definitions (this is expected, the hard
crash with #if 1 is not).


It seems to be caused by something that passes a nullptr as a field name in
compiler/glsl/ir.cpp:1401, gdb backtrace is large:

Thread 1 "Fragmentarium-2" received signal SIGSEGV, Segmentation fault.
__strcmp_ssse3 () at ../sysdeps/x86_64/multiarch/../strcmp.S:173
173     ../sysdeps/x86_64/multiarch/../strcmp.S: No such file or directory.
(gdb) bt
#0  0x00007ffff64c40b6 in __strcmp_ssse3 () at
../sysdeps/x86_64/multiarch/../strcmp.S:173
#1  0x00007fffe24c7d6d in glsl_type::field_type(char const*) const
(this=<optimized out>, name=name@entry=0x0) at
../../../src/compiler/glsl_types.cpp:1228
#2  0x00007fffe24cba3f in
ir_dereference_record::ir_dereference_record(ir_rvalue*, char const*)
(this=0x555556f46e00, value=<optimized out>, field=0x0) at
../../../src/compiler/glsl/ir.cpp:1401
#3  0x00007fffe24ce720 in ir_dereference_record::clone(void*, hash_table*)
const (this=<optimized out>, mem_ctx=<optimized out>, ht=<optimized out>) at
../../../src/compiler/glsl/list.h:58
#4  0x00007fffe2456ab4 in ast_expression::do_hir(exec_list*,
_mesa_glsl_parse_state*, bool) (this=0x555556d12bf8,
instructions=0x555556f459d0, state=0x555556341530, needs_rvalue=<optimized
out>)
    at ../../../src/compiler/glsl/ast.h:86
#5  0x00007fffe2458b43 in ast_expression_statement::hir(exec_list*,
_mesa_glsl_parse_state*) (this=<optimized out>, instructions=<optimized out>,
state=<optimized out>)
    at ../../../src/compiler/glsl/ast_to_hir.cpp:2228
#6  0x00007fffe2458b9f in ast_compound_statement::hir(exec_list*,
_mesa_glsl_parse_state*) (this=0x555556d12cc8, instructions=0x555556f459d0,
state=0x555556341530)
    at ../../../src/compiler/glsl/ast_to_hir.cpp:2244
#7  0x00007fffe2460f0e in ast_iteration_statement::hir(exec_list*,
_mesa_glsl_parse_state*) (this=0x555556d12d28, instructions=<optimized out>,
state=0x555556341530)
    at ../../../src/compiler/glsl/ast_to_hir.cpp:6902
#8  0x00007fffe2458b9f in ast_compound_statement::hir(exec_list*,
_mesa_glsl_parse_state*) (this=0x555556d12e70, instructions=0x555556ff6690,
state=0x555556341530)
    at ../../../src/compiler/glsl/ast_to_hir.cpp:2244
#9  0x00007fffe245f462 in ast_function_definition::hir(exec_list*,
_mesa_glsl_parse_state*) (this=0x555556d12ed0, instructions=<optimized out>,
state=0x555556341530)
    at ../../../src/compiler/glsl/ast_to_hir.cpp:6182
#10 0x00007fffe2455b70 in _mesa_ast_to_hir(exec_list*, _mesa_glsl_parse_state*)
(instructions=0x5555564c7570, state=0x555556341530) at
../../../src/compiler/glsl/ast_to_hir.cpp:156
#11 0x00007fffe24b9551 in _mesa_glsl_compile_shader(gl_context*, gl_shader*,
bool, bool, bool) (ctx=ctx@entry=0x55555604a230,
shader=shader@entry=0x555556496b40, dump_ast=dump_ast@entry=false,
dump_hir=dump_hir@entry=false, force_recompile=force_recompile@entry=false) at
../../../src/compiler/glsl/glsl_parser_extras.cpp:2106
#12 0x00007fffe235b4d0 in _mesa_compile_shader (ctx=0x55555604a230,
sh=0x555556496b40) at ../../../src/mesa/main/shaderapi.c:1131
#13 0x00007ffff748697f in QOpenGLFunctions::glCompileShader(unsigned int)
(this=<optimized out>, shader=6) at opengl/qopenglfunctions.h:1280
#14 0x00007ffff748697f in QOpenGLShaderPrivate::compile(QOpenGLShader*)
(this=this@entry=0x555556485120, q=q@entry=0x5555563adf10) at
opengl/qopenglshaderprogram.cpp:352
#15 0x00007ffff7487275 in QOpenGLShader::compileSourceCode(char const*)
(this=this@entry=0x5555563adf10, source=source@entry=0x555556b80488 "#version
330 compatibility\n// #donotrun\n\nconst float pi = 3.141592653589793;\nconst
vec3 X = vec3(1.0, 0.0, 0.0);\nconst vec3 Y = vec3(0.0, 1.0, 0.0);\nconst vec3
Z = vec3(0.0, 0.0, 1.0);\n\n// #donotrun\n\n"...) at
opengl/qopenglshaderprogram.cpp:678
#16 0x00007ffff748ce2e in
QOpenGLShaderProgram::addShaderFromSourceCode(QFlags<QOpenGLShader::ShaderTypeBit>,
char const*) (this=this@entry=0x7fffec005bf0, type=..., source=0x555556b80488
"#version 330 compatibility\n// #donotrun\n\nconst float pi =
3.141592653589793;\nconst vec3 X = vec3(1.0, 0.0, 0.0);\nconst vec3 Y =
vec3(0.0, 1.0, 0.0);\nconst vec3 Z = vec3(0.0, 0.0, 1.0);\n\n//
#donotrun\n\n"...)
    at opengl/qopenglshaderprogram.cpp:980
#17 0x00007ffff748cf8b in
QOpenGLShaderProgram::addShaderFromSourceCode(QFlags<QOpenGLShader::ShaderTypeBit>,
QString const&) (this=0x7fffec005bf0, type=..., source=...)
    at ../../include/QtCore/../../src/corelib/tools/qarraydata.h:206
#18 0x00005555555e0acd in
Fragmentarium::GUI::DisplayWidget::initFragmentShader() (this=0x5555558e0c00)
    at
/home/claude/code/github.com/3Dickulus/FragM/Fragmentarium-Source/Fragmentarium/GUI/DisplayWidget.cpp:439
#19 0x00005555555deeaf in
Fragmentarium::GUI::DisplayWidget::setFragmentShader(Fragmentarium::Parser::FragmentSource)
(this=0x5555558e0c00, fs=...)
    at
/home/claude/code/github.com/3Dickulus/FragM/Fragmentarium-Source/Fragmentarium/GUI/DisplayWidget.cpp:183
#20 0x000055555561b6f2 in Fragmentarium::GUI::MainWindow::initializeFragment()
(this=0x555555852650) at
/home/claude/code/github.com/3Dickulus/FragM/Fragmentarium-Source/Fragmentarium/GUI/MainWindow.cpp:2239
#21 0x0000555555684895 in
Fragmentarium::GUI::MainWindow::qt_static_metacall(QObject*, QMetaObject::Call,
int, void**) (_o=0x555555852650, _c=QMetaObject::InvokeMetaMethod, _id=35,
_a=0x7fffffffcfd0)
    at
/home/claude/code/github.com/3Dickulus/FragM/Fragmentarium-Source/build/Fragmentarium-2.5.0_autogen/S5HU6OSMQS/moc_MainWindow.cpp:456
#22 0x00007ffff6b107cb in QMetaObject::activate(QObject*, int, int, void**) ()
at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#23 0x00007ffff7731ef2 in QAction::triggered(bool) () at
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#24 0x00007ffff7734500 in QAction::activate(QAction::ActionEvent) () at
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#25 0x00007ffff781fd2d in  () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#26 0x00007ffff781ff65 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) ()
at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#27 0x00007ffff7909cba in QToolButton::mouseReleaseEvent(QMouseEvent*) () at
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#28 0x00007ffff77767d8 in QWidget::event(QEvent*) () at
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#29 0x00007ffff7909d63 in QToolButton::event(QEvent*) () at
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#30 0x00007ffff77384a1 in QApplicationPrivate::notify_helper(QObject*, QEvent*)
() at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#31 0x00007ffff773fd28 in QApplication::notify(QObject*, QEvent*) () at
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#32 0x00007ffff6ae7589 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
() at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#33 0x00007ffff773f029 in QApplicationPrivate::sendMouseEvent(QWidget*,
QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#34 0x00007ffff7791314 in  () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#35 0x00007ffff7793e9e in  () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#36 0x00007ffff77384a1 in QApplicationPrivate::notify_helper(QObject*, QEvent*)
() at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#37 0x00007ffff773fae0 in QApplication::notify(QObject*, QEvent*) () at
/usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
---Type <return> to continue, or q <return> to quit---
#38 0x00007ffff6ae7589 in QCoreApplication::notifyInternal2(QObject*, QEvent*)
() at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#39 0x00007ffff716baab in QCoreApplication::sendSpontaneousEvent(QObject*,
QEvent*) (event=0x7fffffffd8a0, receiver=0x555555aec440) at
../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:237
#40 0x00007ffff716baab in
QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*)
(e=0x55555602a370) at kernel/qguiapplication.cpp:2081
#41 0x00007ffff716d9a5 in
QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*)
(e=e@entry=0x55555602a370) at kernel/qguiapplication.cpp:1816
#42 0x00007ffff71480db in
QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>)
(flags=...) at kernel/qwindowsysteminterface.cpp:1032
#43 0x00007ffff2830eeb in
QPAEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
(this=0x5555557ffb90, flags=...) at qeventdispatcher_glib.cpp:70
#44 0x00007ffff6ae625b in
QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#45 0x00007ffff6aee3d2 in QCoreApplication::exec() () at
/usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#46 0x00005555555d35f3 in main(int, char**) (argc=1, argv=0x7fffffffe158) at
/home/claude/code/github.com/3Dickulus/FragM/Fragmentarium-Source/Fragmentarium/Main.cpp:199


You are receiving this mail because:
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel

[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux