[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