OSDN Git Service

2009-07-09 Basile Starynkevitch <basile@starynkevitch.net>
authorbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 9 Jul 2009 17:57:14 +0000 (17:57 +0000)
committerbstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 9 Jul 2009 17:57:14 +0000 (17:57 +0000)
* gcc/plugin.c (try_init_one_plugin): passes RTLD_GLOBAL to dlopen.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@149424 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/plugin.c

index cc7e186..114d4a1 100644 (file)
@@ -1,3 +1,8 @@
+
+2009-07-09  Basile Starynkevitch  <basile@starynkevitch.net>
+
+       * plugin.c (try_init_one_plugin): passes RTLD_GLOBAL to dlopen. 
+
 2009-07-09  Jakub Jelinek  <jakub@redhat.com>
 
        PR middle-end/40692
index f657850..9060683 100644 (file)
@@ -592,7 +592,11 @@ try_init_one_plugin (struct plugin_name_args *plugin)
   char *err;
   PTR_UNION_TYPE (plugin_init_func) plugin_init_union;
 
-  dl_handle = dlopen (plugin->full_name, RTLD_NOW);
+  /* We use RTLD_NOW to accelerate binding and detect any mismatch
+     between the API expected by the plugin and the GCC API; we use
+     RTLD_GLOBAL which is useful to plugins which themselves call
+     dlopen.  */
+  dl_handle = dlopen (plugin->full_name, RTLD_NOW | RTLD_GLOBAL);
   if (!dl_handle)
     {
       error ("Cannot load plugin %s\n%s", plugin->full_name, dlerror ());