diff options
-rw-r--r-- | 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 0ccf6a698bd..d2d7eccd92f 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; } |