Mesa (master): gallivm: abort when trying to use non-existing intrinsic

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Dec 21 16:41:45 UTC 2018


Module: Mesa
Branch: master
Commit: 171983dc89435d951ebfa42018546fb77d89d018
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=171983dc89435d951ebfa42018546fb77d89d018

Author: Roland Scheidegger <sroland at vmware.com>
Date:   Fri Dec 21 02:41:31 2018 +0100

gallivm: abort when trying to use non-existing intrinsic

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.)

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

---

 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 74ed16f33f..cf1f058ff3 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) {
+         _debug_printf("llvm (version 0x%x) found no intrinsic for %s, going to crash...\n",
+                HAVE_LLVM, name);
+         abort();
+      }
+
       if (!set_callsite_attrs)
          lp_add_func_attributes(function, attr_mask);
 




More information about the mesa-commit mailing list