gallivm: add coro malloc hooks earlier and always.

This fixes GALLIVM_DEBUG=asm for compute shaders, changing
the hooks after dumping causes a segfault because the
memory has already been finalised. Just add the hooks always,
and before dumping anything.

Fixes: f511d2a553 ("gallivm: rework coroutine malloc/free callouts.")
Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19714>
This commit is contained in:
Dave Airlie
2022-11-14 13:47:02 +10:00
committed by Marge Bot
parent 301daf868b
commit fb7de303ba
3 changed files with 4 additions and 5 deletions

View File

@@ -3629,12 +3629,10 @@ draw_tcs_llvm_create_variant(struct draw_llvm *llvm,
draw_tcs_llvm_dump_variant_key(&variant->key); draw_tcs_llvm_dump_variant_key(&variant->key);
} }
lp_build_coro_declare_malloc_hooks(variant->gallivm);
draw_tcs_llvm_generate(llvm, variant); draw_tcs_llvm_generate(llvm, variant);
gallivm_compile_module(variant->gallivm); gallivm_compile_module(variant->gallivm);
lp_build_coro_add_malloc_hooks(variant->gallivm);
variant->jit_func = (draw_tcs_jit_func) variant->jit_func = (draw_tcs_jit_func)
gallivm_jit_function(variant->gallivm, variant->function); gallivm_jit_function(variant->gallivm, variant->function);

View File

@@ -37,6 +37,7 @@
#include "lp_bld_debug.h" #include "lp_bld_debug.h"
#include "lp_bld_misc.h" #include "lp_bld_misc.h"
#include "lp_bld_init.h" #include "lp_bld_init.h"
#include "lp_bld_coro.h"
#include "lp_bld_printf.h" #include "lp_bld_printf.h"
#include <llvm/Config/llvm-config.h> #include <llvm/Config/llvm-config.h>
@@ -409,6 +410,7 @@ init_gallivm_state(struct gallivm_state *gallivm, const char *name,
if (!create_pass_manager(gallivm)) if (!create_pass_manager(gallivm))
goto fail; goto fail;
lp_build_coro_declare_malloc_hooks(gallivm);
return TRUE; return TRUE;
fail: fail:
@@ -667,6 +669,8 @@ gallivm_compile_module(struct gallivm_state *gallivm)
lp_init_clock_hook(gallivm); lp_init_clock_hook(gallivm);
LLVMAddGlobalMapping(gallivm->engine, gallivm->get_time_hook, os_time_get_nano); LLVMAddGlobalMapping(gallivm->engine, gallivm->get_time_hook, os_time_get_nano);
lp_build_coro_add_malloc_hooks(gallivm);
if (gallivm_debug & GALLIVM_DEBUG_ASM) { if (gallivm_debug & GALLIVM_DEBUG_ASM) {
LLVMValueRef llvm_func = LLVMGetFirstFunction(gallivm->module); LLVMValueRef llvm_func = LLVMGetFirstFunction(gallivm->module);

View File

@@ -148,8 +148,6 @@ generate_compute(struct llvmpipe_context *lp,
} }
} }
lp_build_coro_declare_malloc_hooks(gallivm);
if (variant->gallivm->cache->data_size) if (variant->gallivm->cache->data_size)
return; return;
@@ -830,7 +828,6 @@ generate_variant(struct llvmpipe_context *lp,
gallivm_compile_module(variant->gallivm); gallivm_compile_module(variant->gallivm);
lp_build_coro_add_malloc_hooks(variant->gallivm);
variant->nr_instrs += lp_build_count_ir_module(variant->gallivm->module); variant->nr_instrs += lp_build_count_ir_module(variant->gallivm->module);
variant->jit_function = (lp_jit_cs_func) variant->jit_function = (lp_jit_cs_func)