From 9f1c699f360b91493523aba696893fe7af775773 Mon Sep 17 00:00:00 2001 From: Jeff Squyres Date: Wed, 10 Mar 2010 17:03:25 +0000 Subject: [PATCH] Add a patch to libltdl so that the preopen loader doesn't mask a real error if the file-based dloader (e.g., dlopen) fails to load a DSO for a complex reason (e.g., unresolved symbol). This has been widely reported upstream to the libltdl maintainers - a general solution is difficult. This is very definitely an OMPI-specific solution. Since our embedded libltdl is hidden behind visibility flags, that's ok. Note that this is a change to autogen.sh, but this commit does not force re-running autogen.sh. You'll just get the new functionality the next time you re-run autogen.sh. This commit was SVN r22806. --- autogen.sh | 5 +++++ config/Makefile.am | 3 ++- config/libltdl-preopen-error.patch | 27 +++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 config/libltdl-preopen-error.patch diff --git a/autogen.sh b/autogen.sh index 84532d7541..640c7dd1f7 100755 --- a/autogen.sh +++ b/autogen.sh @@ -490,6 +490,11 @@ EOF mv configure.new configure chmod a+x configure fi + echo " ++ preopen error masking ib libltdl" + if test -r opal/libltdl/loaders/preopen.c; then + patch -N -p0 < config/libltdl-preopen-error.patch + rm -f opal/libltdl/loaders/preopen.c.rej + fi # See # http://lists.gnu.org/archive/html/bug-libtool/2008-05/msg00045.html. diff --git a/config/Makefile.am b/config/Makefile.am index 1e9336b408..f8a3351ebc 100644 --- a/config/Makefile.am +++ b/config/Makefile.am @@ -9,7 +9,7 @@ # University of Stuttgart. All rights reserved. # Copyright (c) 2004-2005 The Regents of the University of California. # All rights reserved. -# Copyright (c) 2006 Cisco Systems, Inc. All rights reserved. +# Copyright (c) 2006-2010 Cisco Systems, Inc. All rights reserved. # $COPYRIGHT$ # # Additional copyrights may follow @@ -21,6 +21,7 @@ EXTRA_DIST = \ distscript.csh \ ompi_get_version.m4sh \ libltdl_dlopen_global.diff \ + libltdl-preopen-error.diff \ lt-sun-fortran.diff \ lt1522-pathCC.diff \ lt21a-pathCC.diff \ diff --git a/config/libltdl-preopen-error.patch b/config/libltdl-preopen-error.patch new file mode 100644 index 0000000000..68eecc5627 --- /dev/null +++ b/config/libltdl-preopen-error.patch @@ -0,0 +1,27 @@ +--- opal/libltdl/loaders/preopen.c.~1~ 2010-03-03 14:13:28.000000000 -0500 ++++ opal/libltdl/loaders/preopen.c 2010-03-05 17:57:11.000000000 -0500 +@@ -185,7 +185,24 @@ + } + } + ++#if 0 ++ /* Open MPI: This line is commented out because Open MPI does not ++ use the preopen functionality in libltdl at all -- so we never ++ need to see errors from this module. Additionally, this module ++ is usually invoked last in the sequence when trying to ++ lt_dlopenadvise() a DSO -- so if there was a real error when ++ opening that DSO (e.g., a symbol not found), setting the ++ FILE_NOT_FOUND error here will mask the real error. ++ ++ This error has been reported upstream to the Libtool maintainers; ++ they acknowledge that it is a problem but no one has come up with ++ a good general solution yet. This Open MPI-specific solution is ++ workable for us, but not workable as a general solution. Hence, ++ we patch in this "if 0" block in autogen.sh after Libtool ++ installs libltdl in the opal/ tree. ++ */ + LT__SETERROR (FILE_NOT_FOUND); ++#endif + + done: + return module;