Re: [Darwin] Fix build warnings for libstdc++ [NFC]

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: [Darwin] Fix build warnings for libstdc++ [NFC]

Jonathan Wakely-3
On 03/12/18 00:37 +0000, Iain Sandoe wrote:
>Hi,
>
>GCC does not export construction vtable symbols from shared libraries**.
>
>The symbols are marked hidden in the objects; for Darwin that makes them also external (“private_extern” is Darwin’s hidden) which means that they show up in the list of possible symbols for export from libstdc++, and there are sufficiently relaxed match conditions that they reach the exports list.   When Darwin’s static linker encounters them it generates a warning that they cannot be exported.  This patch prunes them from the list of symbols to be considered, thus eliminating the warnings.
>
>OK for trunk?

Yes, OK.

>Iain
>
>**  This seems a design decision, rather than an ABI mandate - note that, on Darwin at least, these symbols *are* visible in libc++.
>
>libstdc++-v3/
>
> * scripts/make_exports.pl (check names): Don’t try to export construction
> vtable symbols.
>
>
>diff --git a/libstdc++-v3/scripts/make_exports.pl b/libstdc++-v3/scripts/make_exports.pl
>index 7c9e4e31d4..93100e17dd 100644
>--- a/libstdc++-v3/scripts/make_exports.pl
>+++ b/libstdc++-v3/scripts/make_exports.pl
>@@ -103,6 +103,14 @@ NAME: while (<NM>) {
>     # Ignore undefined and local symbols.
>     next if (/^([^ ]+) [Ua-z] /);
>
>+    # GCC does not export construction vtables from shared libraries.
>+    # However the symbols are marked hidden, for Darwin that makes them
>+    # also external "private_extern", which means that they show up in
>+    # this list.  When ld64 encounters them it generates a warning that
>+    # they cannot be exported, so trim them from the set now.
>+    next if (/^construction vtable.*$/);
>+    next if (/^__ZTC.*$/);
>+
>