From: Jason Merrill Date: Fri, 13 Jun 2014 16:39:37 +0000 (-0400) Subject: re PR c++/60731 (dynamic library not getting reinitialized on multiple calls to dlopen()) X-Git-Tag: releases/gcc-4.8.4~415 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=59a167fc352cd8980c99f74a629f1522a1603062;p=thirdparty%2Fgcc.git re PR c++/60731 (dynamic library not getting reinitialized on multiple calls to dlopen()) PR c++/60731 * common.opt (-fno-gnu-unique): Add. * config/elfos.h (USE_GNU_UNIQUE_OBJECT): Check it. From-SVN: r211648 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 250fb001d50c..c950ee7e6df4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-06-13 Jason Merrill + + PR c++/60731 + * common.opt (-fno-gnu-unique): Add. + * config/elfos.h (USE_GNU_UNIQUE_OBJECT): Check it. + 2014-06-12 Georg-Johann Lay Backport from 2014-05-09 trunk r210272 diff --git a/gcc/common.opt b/gcc/common.opt index bdbd3b6cd9ea..ec4cafc448bf 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -1226,6 +1226,10 @@ fgnu-tm Common Report Var(flag_tm) Enable support for GNU transactional memory +fgnu-unique +Common Report Var(flag_gnu_unique) Init(1) +Use STB_GNU_UNIQUE if supported by the assembler + floop-flatten Common Ignore Does nothing. Preserved for backward compatibility. diff --git a/gcc/config/elfos.h b/gcc/config/elfos.h index 438302345cf1..43aab7362f3d 100644 --- a/gcc/config/elfos.h +++ b/gcc/config/elfos.h @@ -287,7 +287,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see /* Write the extra assembler code needed to declare an object properly. */ #ifdef HAVE_GAS_GNU_UNIQUE_OBJECT -#define USE_GNU_UNIQUE_OBJECT 1 +#define USE_GNU_UNIQUE_OBJECT flag_gnu_unique #else #define USE_GNU_UNIQUE_OBJECT 0 #endif diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index c39192b7fb1e..dcb3d776731a 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1009,6 +1009,7 @@ See S/390 and zSeries Options. -ffixed-@var{reg} -fexceptions @gol -fnon-call-exceptions -fdelete-dead-exceptions -funwind-tables @gol -fasynchronous-unwind-tables @gol +-fno-gnu-unique @gol -finhibit-size-directive -finstrument-functions @gol -finstrument-functions-exclude-function-list=@var{sym},@var{sym},@dots{} @gol -finstrument-functions-exclude-file-list=@var{file},@var{file},@dots{} @gol @@ -20357,6 +20358,20 @@ Generate unwind table in DWARF 2 format, if supported by target machine. The table is exact at each instruction boundary, so it can be used for stack unwinding from asynchronous events (such as debugger or garbage collector). +@item -fno-gnu-unique +@opindex fno-gnu-unique +On systems with recent GNU assembler and C library, the C++ compiler +uses the @code{STB_GNU_UNIQUE} binding to make sure that definitions +of template static data members and static local variables in inline +functions are unique even in the presence of @code{RTLD_LOCAL}; this +is necessary to avoid problems with a library used by two different +@code{RTLD_LOCAL} plugins depending on a definition in one of them and +therefore disagreeing with the other one about the binding of the +symbol. But this causes @code{dlclose} to be ignored for affected +DSOs; if your program relies on reinitialization of a DSO via +@code{dlclose} and @code{dlopen}, you can use +@option{-fno-gnu-unique}. + @item -fpcc-struct-return @opindex fpcc-struct-return Return ``short'' @code{struct} and @code{union} values in memory like