PR61536 is a case where linking fails on arm-linux-gnueabi* and arm-eabi* systems as the C++ ABI for ARM specifies out of line comparison operators for typeinfo.

Rev r211355 tightened the symbols exported by libstdc++ a bit too much which caused some carnage in the test results for arm-linux-gnueabihf.

Paolo proposed this on the bugzilla and asked if I could commit it. I've tweaked the comment slightly.

Tested on arm-none-linux-gnueabihf and verified the link time failures now disappear.

Applied to trunk.

Ramana

2014-06-18  Paolo Carlini  <paolo.carl...@oracle.com>
            Ramana Radhakrishnan  <ramana.radhakrish...@arm.com>

        PR libstdc++/61536
        * config/abi/pre/gnu.ver: Adjust for out of line comparisons.
diff --git a/libstdc++-v3/config/abi/pre/gnu.ver 
b/libstdc++-v3/config/abi/pre/gnu.ver
index e7de756..63c9130 100644
--- a/libstdc++-v3/config/abi/pre/gnu.ver
+++ b/libstdc++-v3/config/abi/pre/gnu.ver
@@ -16,6 +16,18 @@
 ## You should have received a copy of the GNU General Public License along
 ## with this library; see the file COPYING3.  If not see
 ## <http://www.gnu.org/licenses/>.
+// By default follow the old inline rules to avoid ABI changes.
+// Logic similar to libsupc++/typeinfo (libstdc++/61536). See
+// commentary on out of line comparisons.
+
+#ifndef __GXX_TYPEINFO_EQUALITY_INLINE
+ #if !__GXX_WEAK__
+   #define __GXX_TYPEINFO_EQUALITY_INLINE 0
+  #else
+    #define __GXX_TYPEINFO_EQUALITY_INLINE 1
+  #endif
+#endif
+
 
 GLIBCXX_3.4 {
 
@@ -760,6 +772,11 @@ GLIBCXX_3.4 {
     _ZNKSt9type_info1*;
     _ZNSt9type_infoD*;
 
+#if !__GXX_TYPEINFO_EQUALITY_INLINE
+    _ZNKSt9type_info6before*;
+    _ZNKSt9type_infoeq*;
+#endif
+
     # std::exception
     _ZNKSt9exception4whatEv;
     _ZNSt9exceptionD*;

Reply via email to