Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Revert "Remove usage of RTLD_DEEPBIND."
authorArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 19 Sep 2018 20:13:27 +0000 (22:13 +0200)
committerArnaud Giersch <arnaud.giersch@univ-fcomte.fr>
Wed, 19 Sep 2018 21:44:37 +0000 (23:44 +0200)
It's in fact needed for starpu and some of the smpi proxy apps.

This reverts commit f257ec7c9ab6e14b11ea63378065db42105882b5.

src/smpi/internals/smpi_global.cpp

index 2169f67..6ad37cd 100644 (file)
@@ -53,6 +53,14 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_kernel, smpi, "Logging specific to SMPI (ke
   extern "C" void _gfortran_set_args(int, char **);
 #endif
 
+#ifndef RTLD_DEEPBIND
+/* RTLD_DEEPBIND is a bad idea of GNU ld that obviously does not exist on other platforms
+ * See https://www.akkadia.org/drepper/dsohowto.pdf
+ * and https://lists.freebsd.org/pipermail/freebsd-current/2016-March/060284.html
+*/
+#define RTLD_DEEPBIND 0
+#endif
+
 #if HAVE_PAPI
 #include "papi.h"
 std::string papi_default_config_name = "default";
@@ -603,7 +611,7 @@ static void smpi_init_privatization_dlopen(std::string executable)
 
       rank++;
       // Load the copy and resolve the entry point:
-      void* handle    = dlopen(target_executable.c_str(), RTLD_LAZY | RTLD_LOCAL);
+      void* handle    = dlopen(target_executable.c_str(), RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
       int saved_errno = errno;
       if (simgrid::config::get_value<bool>("smpi/keep-temps") == false) {
         unlink(target_executable.c_str());