[Mesa-dev] [PATCH 3/3] glsl_compiler: Add binding hash tables to avoid SIGSEVs on linking stage

Brian Paul brianp at vmware.com
Tue Nov 18 07:40:55 PST 2014


Thanks for splitting up the patch.  Your commit message below line wraps 
a bit short (~70 chars is about right).  I'll fix that before pushing.

-Brian


On 11/18/2014 06:49 AM, Andres Gomez wrote:
> When using the stand alone compiler, if we try to
> link a shader with vertex attributes it will
> segfault on linking as the binding hash tables are
> not included in the shader program. Obviously, we
> cannot make the linking stage succeed without the
> bound attributes but we can prevent the crash and
> just let the linker spit its own error.
> ---
>   src/glsl/main.cpp | 10 ++++++++++
>   1 file changed, 10 insertions(+)
>
> diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
> index 9b36a1f..91e457a 100644
> --- a/src/glsl/main.cpp
> +++ b/src/glsl/main.cpp
> @@ -35,6 +35,7 @@
>   #include "glsl_parser_extras.h"
>   #include "ir_optimization.h"
>   #include "program.h"
> +#include "program/hash_table.h"
>   #include "loop_analysis.h"
>   #include "standalone_scaffolding.h"
>
> @@ -357,6 +358,11 @@ main(int argc, char **argv)
>      assert(whole_program != NULL);
>      whole_program->InfoLog = ralloc_strdup(whole_program, "");
>
> +   /* Created just to avoid segmentation faults */
> +   whole_program->AttributeBindings = new string_to_uint_map;
> +   whole_program->FragDataBindings = new string_to_uint_map;
> +   whole_program->FragDataIndexBindings = new string_to_uint_map;
> +
>      for (/* empty */; argc > optind; optind++) {
>         whole_program->Shaders =
>   	 reralloc(whole_program, whole_program->Shaders,
> @@ -415,6 +421,10 @@ main(int argc, char **argv)
>      for (unsigned i = 0; i < MESA_SHADER_STAGES; i++)
>         ralloc_free(whole_program->_LinkedShaders[i]);
>
> +   delete whole_program->AttributeBindings;
> +   delete whole_program->FragDataBindings;
> +   delete whole_program->FragDataIndexBindings;
> +
>      ralloc_free(whole_program);
>      _mesa_glsl_release_types();
>      _mesa_glsl_release_builtin_functions();
>



More information about the mesa-dev mailing list