On Wed, Jan 20, 2016 at 3:49 AM, Yvan Roux yvan.roux@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-A... 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