On Wed, Jan 20, 2016 at 3:49 AM, Yvan Roux <yvan.r...@linaro.org> wrote:
>> I don't know how much distros were involved in the original design.
>> Did they request the changes? Or was that an internal change? How do
>> you guys get to decide when to break the world?

It appears that changes to the C++ standard forced the ABI change, and
the addition of abi_tag was an attempt to support both C++ standard
versions in parallel during the transition period.

I see a patch from Jason Merrill here
    https://gcc.gnu.org/ml/gcc-patches/2012-11/msg00475.html
which says this was discussed at the GNU Cauldron in Prague in 2012.
I was there, but I 'm not a C++ guy,  so I don't recall this
discussion.  The GNU Cauldron is well attended by various distro
contributors (Debian/Ubuntu, Red Hat, SuSE at least), so there should
have been reasonable coverage at the time.  I don't know if any clang
representatives were present.

It appears that a complaint from doko started this mess.  I see two
parallel threads complaining about ABI incompatibilities between C++98
and C++11 right before the GNU Cauldron, one of which is from doko.
    https://gcc.gnu.org/ml/gcc/2012-06/msg00201.html
    https://gcc.gnu.org/ml/gcc/2012-06/msg00202.html

Then in July, I see a third thread started by Jason Merrill that seems
to have the first suggestion of using an attribute to change mangling.
    https://gcc.gnu.org/ml/gcc/2012-07/msg00031.html

Then during the Cauldron, a summary of the C++ ABI BOF which I likely
did not attend
    https://gcc.gnu.org/ml/gcc/2012-07/msg00098.html
See in particular Ian's reply which has a lot more details about the
proposed GNU solution.  The initial message mentions HP and Sun
solutions to this problem, but doesn't talk much about the GNU
solution.  This talk would have been attended by Ubuntu, Red Hat, and
SuSE folks at least, so there should have been some agreement from the
distros before we implemented a solution.

Then eventually came Jason's initial implementation patch in November.

While the feature was added a while ago, it wasn't until C++11 was
made the default that it became visible to end users, and that
happened with GCC 5.  Maybe there wasn't enough discussion with the
clang guys before the switch was made from C++98 to C++11.  Us gcc
guys aren't used to having to discuss things with other compiler
developers.  We are good about talking to distro vendors, but we keep
forgetting about clang.

I found an old wiki page that talks about ABI changes between C++98 and C++11.
   https://gcc.gnu.org/wiki/Cxx11AbiCompatibility

I doubt that there is any formal specification of any of this stuff
anywhere.  The attribute abi_tag is documented in the gcc manual.
    
https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html#C_002b_002b-Attributes
You perhaps care more about how libstdc++ uses it, which isn't in the
gcc manual.  I do see two mentions in the libstdc++ docs
    https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html
    https://gcc.gnu.org/onlinedocs/libstdc++/manual/api.html

Most of the discussion of this feature probably occurred on the
libstdc++ mailing list which I don't read.  I have limited knowledge
of C++, and basically no knowledge of the gcc C++ front end, so I
can't comment on the C++ technical matters here.

Jim
_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
https://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to