From 8d4cf6d7c368be7d5e1b7302f6639ca540649d05 Mon Sep 17 00:00:00 2001 From: Basile Starynkevitch Date: Thu, 9 Jul 2009 17:57:14 +0000 Subject: [PATCH] plugin.c (try_init_one_plugin): passes RTLD_GLOBAL to dlopen. 2009-07-09 Basile Starynkevitch * gcc/plugin.c (try_init_one_plugin): passes RTLD_GLOBAL to dlopen. From-SVN: r149424 --- gcc/ChangeLog | 5 +++++ gcc/plugin.c | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cc7e18644ed..114d4a18d4d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ + +2009-07-09 Basile Starynkevitch + + * plugin.c (try_init_one_plugin): passes RTLD_GLOBAL to dlopen. + 2009-07-09 Jakub Jelinek PR middle-end/40692 diff --git a/gcc/plugin.c b/gcc/plugin.c index f6578505b88..906068387b7 100644 --- a/gcc/plugin.c +++ b/gcc/plugin.c @@ -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 ());