[libcxx] r196411 - Give all members of exception types default visibility. Lack of this is causing some illegal code relocations rare and hard to reproduce cases.

Duncan P. N. Exon Smith via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 8 16:50:56 PST 2016


[re-send to lists.llvm.org]
[necromancy]

This is causing some strangeness for users of libc++ headers that
ship dylibs and build with -fno-rtti and -fvisibility=hidden.

Strangely, -fno-rtti does *not* imply -fno-exceptions; the type info
needed for exceptions is generated on-the-fly.  This means that each
translation unit generates a linkonce_odr copy of the std::exception
type info -- weird, but kind of reasonable?

Because of this commit, the (non-canonical) type info from these
other dylibs is getting exported, even though they compile with
-fvisibility=hidden.  On Darwin, this means that a link line like
this:
--
$ ld -o a.out a.o -library-without-rtti -lc++
--
will find the type info in libibrary-without-rtti.dylib instead of
libc++.1.dylib.  That doesn't seem reasonable.

The request I've had from such dylib owners is to effectively revert
this commit, so that their copy of std::exception type info isn't
exported when they use -fvisibility=hidden.  However, then their
copy of the type info won't get coalesced with libc++.1.dylib's.

Does anyone have an opinion on this?  Should we care about the
visibility of std::exception type info when -fno-rtti?  (Note that
when RTTI is on, clang correctly does not generate the type info
for std::exception and friends.)

Howard, any chance you remember more about the problems this fixed?

> On 2013-Dec-04, at 13:03, Howard Hinnant <hhinnant at apple.com> wrote:
> 
> Author: hhinnant
> Date: Wed Dec  4 15:03:23 2013
> New Revision: 196411
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=196411&view=rev
> Log:
> Give all members of exception types default visibility.  Lack of this is causing some illegal code relocations rare and hard to reproduce cases.
> 
> Modified:
>   libcxx/trunk/include/__config
> 
> Modified: libcxx/trunk/include/__config
> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=196411&r1=196410&r2=196411&view=diff
> ==============================================================================
> --- libcxx/trunk/include/__config (original)
> +++ libcxx/trunk/include/__config Wed Dec  4 15:03:23 2013
> @@ -194,7 +194,7 @@
> #endif
> 
> #ifndef _LIBCPP_EXCEPTION_ABI
> -#define _LIBCPP_EXCEPTION_ABI _LIBCPP_TYPE_VIS
> +#define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default")))
> #endif
> 
> #ifndef _LIBCPP_ALWAYS_INLINE
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list