This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] libstdc++ ABI issues with __int128
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Benjamin Kosnik <benjamin dot kosnik at gmail dot com>
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Mon, 21 Mar 2011 10:15:46 +0100
- Subject: Re: [PATCH] libstdc++ ABI issues with __int128
- References: <AANLkTimrPd6v8Y8_i4QtRam21kmfoeAPq__jFTbBBi89@mail.gmail.com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Sun, Mar 20, 2011 at 01:58:24AM +0100, Benjamin Kosnik wrote:
> 2011-03-19 Jakub Jelinek <jakub@redhat.com>
>
> * config/abi/pre/gnu.ver (CXXABI_1.3): Don't export _ZT[IS][PK]*[no].
> (CXXABI_1.3.5): Export _ZTI[PK]*[no].
>
> This looks good to me, nice catch. I'll figure out what happened with
> check_abi when I'm back, conductivity-wise.
The problem is that abicheck only flags as incompatible additions to
GLIBCXX_3.4, but not other base versions. Ideally it would flag addition
to any version that hasn't been added (addition of the version is flagged
by
OBJECT:0:CXXABI_1.3.5
etc. entries (no @s in it).
This patch for now just complains about additions to any base versions,
I'll leave the better alternative to you ;)
2011-03-21 Jakub Jelinek <jakub@redhat.com>
* testsuite/util/testsuite_abi.cc (check_version): Set incompatible
even when adding symbols to CXXABI_1.3, GLIBCXX_LDBL_3.4 and
CXXABI_LDBL_1.3 versions.
--- libstdc++-v3/testsuite/util/testsuite_abi.cc.jj 2010-12-13 12:06:14.000000000 +0100
+++ libstdc++-v3/testsuite/util/testsuite_abi.cc 2011-03-21 09:22:13.296401986 +0100
@@ -1,6 +1,6 @@
// -*- C++ -*-
-// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010
+// Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
// Free Software Foundation, Inc.
// This library is free software; you can redistribute it and/or
@@ -217,10 +217,14 @@ check_version(symbol& test, bool added)
else
test.version_status = symbol::incompatible;
- // Check that added symbols aren't added in the base version.
- if (added && test.version_name == known_versions[0])
+ // Check that added symbols aren't added in the base versions.
+ if (added
+ && (test.version_name == known_versions[0]
+ || test.version_name == "CXXABI_1.3"
+ || test.version_name == "GLIBCXX_LDBL_3.4"
+ || test.version_name == "CXXABI_LDBL_1.3"))
test.version_status = symbol::incompatible;
-
+
// Check that long double compatibility symbols demangled as
// __float128 are put into some _LDBL_ version name.
if (added && test.demangled_name.find("__float128") != std::string::npos)
Jakub