[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