On 21/12/2018 01:42, srol...@vmware.com wrote:
From: Roland Scheidegger <srol...@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 <jfons...@vmware.com>

Jose
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to