This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Yo people.
This patch re-works the libstdc++ includes and namespaces. In
particular, it changes the way libstdc++ uses namespace associations
(aka strong using) to implement the debug mode: instead of separate,
top-level namespaces, it uses a nested approach.
ie:
namespace __gnu_debug { }
namespace __gnu_norm { }
becomes:
namespace std
{
namespace __gnu_debug { }
namespace __gnu_norm { }
}
by doing this, the pernicious issues with std::swap
specialization in debug mode are now fixed. In a nutshell, libstdc++
runs with -D_GLIBCXX_DEBUG and without are now equivalent.
This will allow fixes for c++/16021 that require use of namespace
associations in a nested context.
This re-arrangement is on by default, and compatibility shims have
been put in to make sure that old exported symbols are mapped to the
new, nested symbols. Fortunately, only a few debug symbols were ever
exported. It is believed that this is compatible, ABI-wise.
In addition, there is a versioning mode, which is off by default. To
enable, configure with --enable-symvers=gnu-versioned-namespace. This
mode is most definitely not ABI-compatible, as it changes std:: to
std::_6 for linking purposes.
However, solutions of this type solve or partially solve
libstdc++/24660, libstdc++/21405, and libstdc++/21072
In general, I'm quite pleased with this approach, although initially I
was not thrilled by the namespace and macro combination. Frankly, I
don't see a way around this if we are to do a nested debug mode. Every
attempt was made to make the changes as non-invasive as possible. I
think the potential benefits are worth it.
I'd like to check this in, but will wait a bit for comments.
This has been tested pretty extensively.
tested x86/linux
tested x86/linux -D_GLIBCXX_DEBUG
tested x86/linux --enable-symvers=gnu-versioned-namespace
tested x86/linux --enable-symvers=gnu-versioned-namespace -D_GLIBCXX_DEBUG
tested x86/linux --disable-hosted-libstdcxx
tested x86/linux --enable-clocale=generic
-benjamin
Attachment:
p.20051218-5.bz2
Description: BZip2 compressed data
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |