[Mesa-dev] [PATCH] gallivm: abort when trying to use non-existing intrinsic

Jose Fonseca jfonseca at vmware.com
Fri Dec 21 07:46:51 UTC 2018


On 21/12/2018 01:42, sroland at vmware.com wrote:
> From: Roland Scheidegger <sroland at vmware.com>
> 
> Whenever llvm removes an intrinsic (we're using), we're hitting segfaults
> due to llvm doing calls to address 0 in the jitted code instead.
> However, Jose figured out we can actually detect this with
> LLVMGetIntrinsicID(), so use this to abort, so we don't have to wonder
> what got broken. (Of course, someone still needs to fix the code to
> no longer use this intrinsic.)
> ---
>   src/gallium/auxiliary/gallivm/lp_bld_intr.c | 10 ++++++++++
>   1 file changed, 10 insertions(+)
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_intr.c b/src/gallium/auxiliary/gallivm/lp_bld_intr.c
> index 74ed16f33f0..c9df136b103 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_intr.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_intr.c
> @@ -241,6 +241,16 @@ lp_build_intrinsic(LLVMBuilderRef builder,
>   
>         function = lp_declare_intrinsic(module, name, ret_type, arg_types, num_args);
>   
> +      /*
> +       * If llvm removes an intrinsic we use, we'll hit this abort (rather
> +       * than a call to address zero in the jited code).
> +       */
> +      if (LLVMGetIntrinsicID(function) == 0) {
> +         printf("llvm (version 0x%x) found no intrinsic for %s, going to crash...\n",
> +                HAVE_LLVM, name);

Better to use _debug_printf() so it's redirected to stderr (or 
OutpuDebug on Windows.)

> +         abort();
> +      }
> +
>         if (!set_callsite_attrs)
>            lp_add_func_attributes(function, attr_mask);
>   
> 

I think it's worth auditing we don't use lp_build_intrinsic() helper for 
LLVM functions we built ourselves.  I took a look, and didn't found any.

Otherwise

Reviewed-by: Jose Fonseca <jfonseca at vmware.com>

Jose


More information about the mesa-dev mailing list