svn commit: r261801 - head/contrib/libc++/include

David Chisnall theraven at FreeBSD.org
Thu Feb 13 10:11:37 UTC 2014


On 13 Feb 2014, at 01:04, Alexander Kabaev <kabaev at gmail.com> wrote:

> The refusal to use tools that are there precisely to help to help with
> the binary compatibility in favor of mindless library bumps is just sad.

Perhaps you could share with the class.  What is the correct way of solving this problem?  

For those just joining the discussion, the issue is that std::pair was originally declared with an explicit constructor and should have an implicit constructor, which has a different calling convention.  This means that we can't share the two std::pair implementations across libraries, because they will try to call the constructor with the wrong arguments.  Because of templates and C++ name mangling, this ends up being propagated into most libraries that link against libc++, and calling from one with the old definition to one with the new definition end up causing segfaults (if we're lucky - I think the symptom that we're seeing is actually dereferencing a junk value in a register, so it may cause random memory writes, but I'd have to check the ABI).  

Given that neither redeclaring the new std::pair in a new namespace, nor exporting both constructor symbols using symbol versioning (the two approaches that we've already discussed) will work, what are the tools that apparently we're refusing to use that will work?

David



More information about the svn-src-all mailing list