Alexander, Thanks for nailing this. There are still several outstanding bug reports for WINE and LLVM and I never managed to make much progress.
This only covers the MCJIT case, but for LLVM 3.2 we no longer use MCJIT, and just call LLVMCreateJITCompiler (instead of lp_build_create_mcjit_compiler_for_module). So I think we need to create another version of lp_build_create_mcjit_compiler_for_module/LLVMCreateJITCompiler that sets up the target as we need it. Jose ----- Original Message ----- > From: "Alexander V. Nikolaev" <[email protected]> > > LLVM 3.1+ haven't more "extern unsigned llvm::StackAlignmentOverride" > and friends for configuring code generation options, like stack > alignment. > > So I restrict assiging of lvm::StackAlignmentOverride and other > variables to LLVM 3.0 only, and wrote similiar code using > TargetOptions. > > This patch fix segfaulting of WINE using llvmpipe built with LLVM 3.1 > > Signed-off-by: Alexander V. Nikolaev <[email protected]> > --- > src/gallium/auxiliary/gallivm/lp_bld_misc.cpp | 21 > ++++++++++++++++++++- > 1 file changed, 20 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > index dd2c612..8410f84 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp > @@ -109,7 +109,7 @@ lp_set_target_options(void) > * to only assume a 4 bytes alignment for backwards > compatibility. > */ > #if defined(PIPE_ARCH_X86) > -#if HAVE_LLVM >= 0x0300 > +#if HAVE_LLVM == 0x0300 > llvm::StackAlignmentOverride = 4; > #else > llvm::StackAlignment = 4; > @@ -251,8 +251,27 @@ > lp_build_create_mcjit_compiler_for_module(LLVMExecutionEngineRef > *OutJIT, > > std::string Error; > EngineBuilder builder(unwrap(M)); > + > + /** > + * Set proper stack alignment for backward compatibility with > old binaries > + * and WINE. > + */ > + TargetOptions options; > + options.StackAlignmentOverride = 4; > + options.RealignStack = true; > + > +#if defined(DEBUG) > + options.JITEmitDebugInfo = true; > +#endif > + > +#if defined(DEBUG) || defined(PROFILE) > + options.NoFramePointerElimNonLeaf = true; > + options.NoFramePointerElim = true; > +#endif > + > builder.setEngineKind(EngineKind::JIT) > .setErrorStr(&Error) > + .setTargetOptions(options) > .setOptLevel((CodeGenOpt::Level)OptLevel); > > builder.setUseMCJIT(true); > -- > 1.7.10 > > _______________________________________________ > mesa-dev mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
