[cfe-dev] May libc++ support symbol versioning?
David Chisnall via cfe-dev
cfe-dev at lists.llvm.org
Tue Feb 25 06:49:59 PST 2020
I would be interested to know who is making that statement on behalf of
the FreeBSD project. We made a conscious decision *not* to use symbol
versioning for the FreeBSD build of libc++ when we imported it.
Symbol versioning allows you to provide versions for exported symbols.
This is a good solution for maintaining backwards compatibility in C
libraries, where the only things exported from a library are functions
(or, occasionally, globals) and it is often possible to provide
backwards-compatibility versions of functions. For example, FreeBSD
libc provides some compat versions of stat for callers that will provide
a smaller statbuf structure than the newer version of the API expects to
In contrast, C++ libraries export complex types and expect to inline a
large number of the operations on them. The boundary of a C++ library
is much more fuzzy. Types declared in libc++ headers become part of the
name mangling for any functions that take them as arguments. Symbol
versioning does not help with that at all.
Libc++ does provide a mechanism for incrementally changing the ABI. All
of the standard types are declared in the std::__v1 namespace. We could
provide the new versions in the std::__v2 namespace and conditionally
import either version into the std namespace depending on the
compilation options. That would allow code linked against libc++ today
to continue to use the old versions, but allow new code to adopt the new
versions, with the caveat that it would change name mangling of any
function that took a standard library type as arguments, so you would
not be able to mix a library built with old libc++ with one built
against new libc++.
This solution is not actually much better than FreeBSD bumping the
SONAME and relegating the old libc++ to a COMPAT version. I was under
the impression that this was the plan for FreeBSD 12, but apparently it
didn't happen. It is something that should definitely be done for
On 25/02/2020 06:30, Zhihao Yuan via cfe-dev wrote:
> I got message from FreeBSD about whether
> they can upgrade to V2 ABI. To summarize
> the discussion:
> FreeBSD is not willing to land an ABI
> break unless it is for the purpose of
> introducing symbol version because
> breaking libc++ ABI means breaking
> ABI in three actively supported
> FreeBSD versions. There is no such
> thing called "break in the next release."
> May libc++ support symbol versioning
> in V2 or a specific variant of ABI?
> Zhihao Yuan, ID lichray
> The best way to predict the future is to invent it.
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
More information about the cfe-dev