[Mesa-dev] [PATCH] gallivm: abort when trying to use non-existing intrinsic
Roland Scheidegger
sroland at vmware.com
Fri Dec 21 14:28:29 UTC 2018
Am 21.12.18 um 08:46 schrieb Jose Fonseca:
> 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.)
Alright, though this will drop the output on non-debug builds.
>
>> + 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.
It never occurred to me you could use it for ordinary functions. But I
suppose you're right in theory someone could use it (although of course
the function body would have to be defined elsewhere).
Roland
> Otherwise
>
> Reviewed-by: Jose Fonseca <jfonseca at vmware.com>
>
> Jose
More information about the mesa-dev
mailing list