[Mesa-dev] [PATCH] gallivm: abort when trying to use non-existing intrinsic
Jose Fonseca
jfonseca at vmware.com
Fri Dec 21 14:30:29 UTC 2018
On 21/12/2018 14:28, Roland Scheidegger wrote:
> 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.
Not really: debug_printf only prints on debug build, but _debug_printf
(note the leading underscore) always print.
Perhaps it's not the smartest naming convention, but it should do the
expected.
Jose
More information about the mesa-dev
mailing list