From 8b3040d96f754b2d617aad8e10467a08aa81d75b Mon Sep 17 00:00:00 2001 From: iains Date: Thu, 6 Dec 2018 19:42:21 +0000 Subject: [PATCH] Darwin fix libstdc++ build warnings. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. No functional Change inended to the library exports. 2018-12-06 Iain Sandoe * scripts/make_exports.pl (check names): Don’t try to export construction vtable symbols. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266864 138bc75d-0d04-0410-961f-82ee72b054a4 --- libstdc++-v3/ChangeLog | 5 +++++ libstdc++-v3/scripts/make_exports.pl | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 72feab11d9dc..c29ae157db94 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,8 @@ +2018-12-06 Iain Sandoe + + * scripts/make_exports.pl (check names): Don’t try to export + construction vtable symbols. + 2018-12-06 Jonathan Wakely Iain Sandoe diff --git a/libstdc++-v3/scripts/make_exports.pl b/libstdc++-v3/scripts/make_exports.pl index 7c9e4e31d4f8..93100e17ddfc 100644 --- a/libstdc++-v3/scripts/make_exports.pl +++ b/libstdc++-v3/scripts/make_exports.pl @@ -103,6 +103,14 @@ NAME: while () { # 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.*$/); + # $sym is the name of the symbol, $noeh_sym is the same thing with # any '.eh' suffix removed. die "unknown nm output $_" if (! /^([^ ]+) [A-Z] /); -- 2.47.2