Mesa (master): gallivm: Fix for dynamically linked LLVM 2.8 library.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Fri May 20 10:56:40 UTC 2011


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

Author: José Fonseca <jfonseca at vmware.com>
Date:   Fri May 20 11:54:18 2011 +0100

gallivm: Fix for dynamically linked LLVM 2.8 library.

This prevents the error

    prog: for the -disable-mmx option: may only occur zero or one times!

when creating a new context after XCloseDisplay with DRI drivers linked
with a shared LLVM 2.8 library.

---

 src/gallium/auxiliary/gallivm/lp_bld_misc.cpp |   14 ++++++++++++--
 1 files changed, 12 insertions(+), 2 deletions(-)

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;
    }




More information about the mesa-commit mailing list