[Mesa-dev] shared LLVM library causes program abortion

Jose Fonseca jfonseca at vmware.com
Fri May 20 05:20:42 PDT 2011


I've verified this did the trick on Fedora 15, and I've commited the fix to master.  I've opened a bug on fedora so we can track this issue.

Jose

----- Original Message -----
> 
> 
> ----- Original Message -----
> > On 5/17/11 3:24 PM, Jose Fonseca wrote:
> > 
> > > I believe the best alternative here is to build  *_dri.so with -z
> > > nodelete when linking against a shared libLLVM*.
> > 
> > That should work, even though it's incredibly unpleasant.  I would
> > think
> > LLVM would want to be robust against multiple users within the same
> > address space.
> > 
> > - ajax
> > 
> 
> I think I may have found a less intrusive workaround: to use another
> global variable inside libllvm.so to avoid doing the command line
> parsing twice. Diff below, but still need to verify on Fedora.
> 
> This is really just for LLVM 2.8, as LLVM 2.9 handles mmx properly
> out of the box.
> 
> Jose
> 
> 
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
> b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
> index 0ccf6a6..d2d7ecc 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
> @@ -106,13 +106,23 @@ lp_set_target_options(void)
>      * See also:
>      * - http://llvm.org/bugs/show_bug.cgi?id=3287
>      * -
>      http://l4.me.uk/post/2009/06/07/llvm-wrinkle-3-configuration-what-configuration/
> +    *
> +    * The -disable-mmx global option can be specified only once
>  since we
> +    * dynamically link against LLVM it will reside in a separate
> shared object,
> +    * which may or not be delete when this shared object is, so we
> use the
> +    * llvm::DisablePrettyStackTrace variable (which we set below and
> should
> +    * reside in the same shared library) to determine whether the
> -disable-mmx
> +    * option has been set or not.
> +    *
> +    * Thankfully this ugly hack is not necessary on LLVM 2.9
> onwards.
>      */
> -   static boolean first = TRUE;
> -   if (first) {
> +   if (!llvm::DisablePrettyStackTrace) {
> +      static boolean first = TRUE;
>        static const char* options[] = {
>           "prog",
>           "-disable-mmx"
>        };
> +      assert(first);
>        llvm::cl::ParseCommandLineOptions(2,
>        const_cast<char**>(options));
>        first = FALSE;
>     }
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 


More information about the mesa-dev mailing list